Jak dowiedzieć się, który agent uruchamiania lub demon uruchamia proces

11

Po zainstalowaniu programu Autodesk Smoke mam cały czas dwa procesy httpd i chciałbym je zatrzymać. Kiedy używam sudo killall httpd, zatrzymują się i są natychmiast ponownie uruchamiane. Monitor aktywności pokazuje, że proces nadrzędny został uruchomiony, ale jak ustalić, który agent lub demon go uruchamia, aby go wyłączyć?

launchctl list | grep httpd pokazuje te wyniki:

302 -   0x7f94ea700dd0.anonymous.httpd  
92  -   org.apache.httpd

Patrzę /System/Library/LaunchDaemons/org.apache.httpd.plisti pokazuje, co następuje. Możesz zobaczyć, że jest ustawiony na disabled. Drugi launchdelement o dziwnej nazwie nie pojawia się podczas wyszukiwania systemu plików, więc nie mam pojęcia, co to jest.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.apache.httpd</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>XPC_SERVICES_UNAVAILABLE</key>
        <string>1</string>
    </dict>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/httpd</string>
        <string>-D</string>
        <string>FOREGROUND</string>
    </array>
    <key>OnDemand</key>
    <false/>
</dict>
</plist>
Elliott
źródło
Nauczyłem się od Autodesk, że mogę zatrzymać proces, /usr/sbin/apachectl stopale nadal nie wiem, jak go wyłączyć po każdym ponownym uruchomieniu.
Elliott,
(Późny komentarz, wiem!) Dwie możliwe przyczyny zatrzymania uruchamiania od ponownego uruchomienia: (i) launchctl unload(chociaż nie wiem, czy to wymaga określenia ścieżki do listy odtwarzania), (ii) Jeśli jest to w loginitems , użyj narzędzia Preferencje systemowe -> „Użytkownicy i grupy” -> „Elementy logowania” -> Usuń niepoprawny wpis, jeśli został znaleziony.
Vivek,

Odpowiedzi:

5

Możesz grep wynik launchctl listdla pid:

$ pgrep -fl foo
40679 bash /tmp/foo
$ launchctl list|grep 40679
40679   -   com.example.foo

Wtedy na przykład szukał pliku o nazwie com.example.foo.plistw ~/Library/LaunchAgents/, /Library/LaunchAgents/lub /Library/LaunchDaemons/.

Edycja: klucz Wyłączony można zastąpić /var/db/launchd.db/com.apple.launchd/overrides.plist, który jest modyfikowany, gdy launchctl load -wjest uruchamiany jako root, lub w /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist, który jest modyfikowany, gdy launchctl load -wjest uruchamiany jako użytkownik.

Jeśli włączona jest lista Apache dostarczana z systemem OS X, można ją wyłączyć, uruchamiając sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist.

Lri
źródło
Dostałem PID, potem grep launchctl, ale nic nie znalazłem z tym numerem.
Elliott,
Właściwie spróbuj użyć sudo launchctl list. launchctl listwydaje się, że obejmuje tylko zadania załadowane przez proces uruchamiany przez użytkownika.
Lri,
OK, to ma sens, dziękuję. Ale tak naprawdę nie rozwiązałem problemu ... Dodałem więcej szczegółów do pytania.
Elliott,
0

Daje to listę wszystkich odnośnych definicji zadań httpd.

grep -lR httpd /System/Library/Launch*/ /Library/Launch*/ ~/Library/LaunchAgents/
LCC
źródło
Dobry pomysł, ale nie rozwiązał problemu. Jest tylko jeden wynik i jest on wyłączony. Dodałem więcej szczegółów do pytania.
Elliott,
1
To, że jest wyłączone, nie oznacza, że ​​nie został uruchomiony. DisabledKlucz może być nadpisane przez overrides.plistpliki w / poniżej /var/db/launchd.db/. Wyłączone zadanie może być nadal uruchamiane ręcznie (nie automatycznie podczas procesu rozruchu / logowania).
LCC,
Dzięki, nie wiedziałem o tym. Próbowałem grep -rn apache /private/var/db/launchd.dbi znalazłem tylko jeden wynik. Jest wyłączone. Muszę dowiedzieć się, jak ta usługa jest uruchamiana i jak naprawdę ją wyłączyć.
Elliott,
0

Zmieniało się zachowanie launchctl, jeśli usługa zostanie włączona siłą, nie zmieni zawartości źródłowej .plist, ale osobny katalog (którego nie należy modyfikować). Sprawdź stronę man pod kątem launchctl i opcję „-w” pod poleceniem „load”. Tak więc samo sprawdzenie pliku nie będzie konieczne, aby stwierdzić, czy jest on wyłączony, czy nie. Oczywiście nie jest wyłączone :)

Spróbuj „launchctl unload -w org.apache.httpd.plist”. Jeśli to zadziała, nadal będziesz mógł uruchomić go na żądanie za pomocą „launchctl start org.apache.httpd.plist”

Jeśli to nie zadziała, spróbuj „launchctl remove org.apache.httpd.plist”, który nie pozwoli ci ręcznie uruchomić.

Chris Cogdon
źródło
0

Na podstawie wartości etykiety (np. org.apache.httpd) Możesz spróbować znaleźć .plistnastępujące polecenie:

find /System/Library/Launch* /Library/Launch* ~/Library/Launch* -name '*.plist' -print -exec /usr/libexec/PlistBuddy -c "Print Label" {} ';' | grep org.apache.httpd -A1

Aby znaleźć początek procesu, sprawdź jego nadrzędne identyfikatory PID, np

ps -f $(launchctl list | grep org.apache.httpd | grep -o '^[0-9]\+')

Lub użyj pstreepolecenia, określając ręcznie PID, np

pstree 92
kenorb
źródło