So finden Sie heraus, welcher Launch Agent oder Daemon einen Prozess startet


11

Nach der Installation von Autodesk Smoke werden ständig zwei httpd-Prozesse ausgeführt, und ich möchte sie stoppen. Wenn ich benutze sudo killall httpd, hören sie auf und werden sofort neu gestartet. Der Aktivitätsmonitor zeigt an, dass der übergeordnete Prozess gestartet wird. Wie kann ich jedoch feststellen, welcher Agent oder Dämon ihn startet, damit ich ihn deaktivieren kann?

launchctl list | grep httpd zeigt diese Ergebnisse:

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

Ich schaue hinein /System/Library/LaunchDaemons/org.apache.httpd.plistund es zeigt folgendes. Sie können sehen, dass es eingestellt ist disabled. Das andere launchdElement mit einem seltsamen Namen wird in einer Dateisystemsuche nicht angezeigt, daher habe ich keine Ahnung, was es ist.

<?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>

Ich habe von Autodesk erfahren, dass ich den Prozess stoppen kann, /usr/sbin/apachectl stopweiß aber immer noch nicht, wie ich ihn nach jedem Neustart deaktivieren kann.
Elliott

(Später Kommentar, ich weiß!) Zwei mögliche Gründe, um zu verhindern, dass launchd erneut gestartet wird: (i) launchctl unload(obwohl ich nicht weiß, ob Sie dazu den Pfad zur Liste angeben müssen), (ii) Wenn er in Ihren Loginitems enthalten ist Verwenden Sie das Tool "Systemeinstellungen" -> "Benutzer und Gruppen" -> "Anmeldeelemente" -> Löschen Sie einen fehlerhaften Eintrag, falls gefunden.
Vivek

Antworten:


5

Sie können die Ausgabe von launchctl listfür die PID abrufen:

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

Dann zum Beispiel Look für eine Datei mit dem Namen com.example.foo.plistin ~/Library/LaunchAgents/, /Library/LaunchAgents/oder /Library/LaunchDaemons/.

Bearbeiten: Der deaktivierte Schlüssel kann überschrieben werden in /var/db/launchd.db/com.apple.launchd/overrides.plist, der geändert wird, wenn er launchctl load -wals root ausgeführt wird, oder in /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist, der geändert wird, wenn er launchctl load -wals Benutzer ausgeführt wird.

Wenn die mit OS X gelieferte Apache-Liste aktiviert wurde, können Sie sie durch Ausführen deaktivieren sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist.


Ich habe die PID erhalten und dann launchctl gepackt, aber nichts mit dieser Nummer gefunden.
Elliott

Versuchen Sie es tatsächlich mit sudo launchctl list. launchctl listscheint nur Jobs zu enthalten, die vom Startprozess des Benutzers geladen wurden.
Lri

OK, das macht Sinn, danke. Aber das Problem wurde nicht wirklich gelöst ... Ich habe der Frage weitere Details hinzugefügt.
Elliott

0

Auf diese Weise erhalten Sie eine Liste aller Jobdefinitionen, auf die verwiesen wird httpd.

grep -lR httpd /System/Library/Launch*/ /Library/Launch*/ ~/Library/LaunchAgents/

Gute Idee, aber das Problem nicht gelöst. Es gibt nur ein Ergebnis und es ist deaktiviert. Ich habe der Frage weitere Details hinzugefügt.
Elliott

1
Nur weil es deaktiviert ist, heißt das nicht, dass es nicht gestartet wurde. Der DisabledSchlüssel kann durch die overrides.plistDateien in / unten überschrieben werden /var/db/launchd.db/. Außerdem kann ein deaktivierter Job weiterhin manuell (nicht automatisch während des Start- / Anmeldevorgangs) gestartet werden.
LCC

Danke, das wusste ich nicht. Ich habe versucht grep -rn apache /private/var/db/launchd.dbund nur ein Ergebnis gefunden. Es ist deaktiviert. Ich muss herausfinden, wie dieser Dienst gestartet wird und wie ich ihn wirklich deaktivieren kann.
Elliott

0

Das Verhalten von launchctl hat sich dahingehend geändert, dass ein Dienst, der zwangsweise aktiviert wird, nicht den Inhalt der Quell-.plist ändert, sondern ein separates Verzeichnis (das Sie nicht ändern sollten). Überprüfen Sie die Manpage auf launchctl und die Option "-w" unter dem Befehl "load". Wenn Sie die Datei einfach untersuchen, müssen Sie nicht feststellen, ob sie deaktiviert ist oder nicht. Offensichtlich ist es nicht deaktiviert :)

Versuchen Sie "launchctl unload -w org.apache.httpd.plist". Wenn das für Sie funktioniert, können Sie es bei Bedarf weiterhin mit "launchctl start org.apache.httpd.plist" starten.

Wenn dies nicht funktioniert, versuchen Sie "launchctl remove org.apache.httpd.plist", damit Sie nicht manuell starten können.


0

Anhand des Beschriftungswerts (z. B. org.apache.httpd) können Sie versuchen, .plistden folgenden Befehl zu finden:

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

Um herauszufinden, was den Prozess gestartet hat, überprüfen Sie die übergeordneten PIDs, z

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

Oder verwenden Sie den pstreeBefehl, indem Sie die PID manuell angeben, z

pstree 92
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.