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>

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.


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/

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ć.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.