Nach der Installation von Autodesk Smoke laufen zwei httpd-Prozesse ständig und ich möchte sie stoppen. Wenn ich benutze sudo killall httpd
, stoppen sie und werden sofort neu gestartet. Activity Monitor zeigt, dass der übergeordnete Prozess gestartet wird, aber wie kann ich feststellen, welcher Agent oder Daemon 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.plist
und es zeigt folgendes. Sie können sehen, dass es auf eingestellt ist disabled
. Das andere launchd
Element mit einem seltsamen Namen wird bei 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>
Sie können die Ausgabe von launchctl list
für die PID abrufen:
$ pgrep -fl foo
40679 bash /tmp/foo
$ launchctl list|grep 40679
40679 - com.example.foo
Suchen Sie dann beispielsweise nach einer Datei mit dem Namen com.example.foo.plist
, ~/Library/LaunchAgents/
, /Library/LaunchAgents/
oder /Library/LaunchDaemons/
.
Bearbeiten: Der Disabled-Schlüssel kann in überschrieben werden /var/db/launchd.db/com.apple.launchd/overrides.plist
, was geändert wird, wenn launchctl load -w
es als root ausgeführt wird, oder in /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist
, das geändert wird, wenn launchctl load -w
es als Benutzer ausgeführt wird.
Wenn die mit OS X gelieferte Apache-Liste aktiviert war, können Sie sie deaktivieren, indem Sie sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
.
sudo launchctl list
. launchctl list
scheint nur Jobs einzuschließen, die vom Benutzer-launchd-Prozess geladen wurden.Basierend auf dem Label-Wert (z. B. org.apache.httpd
) können Sie versuchen, das .plist
mit dem 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 pstree
Befehl, indem Sie die PID manuell angeben, z
pstree 92
pstree
funktioniert ziemlich gut!Dadurch erhalten Sie eine Liste aller Job-Definitionen, die sich auf beziehen httpd
.
grep -lR httpd /System/Library/Launch*/ /Library/Launch*/ ~/Library/LaunchAgents/
Disabled
Schlüssel kann durch die overrides.plist
Dateien in/unter überschrieben werden /var/db/launchd.db/
. Auch ein deaktivierter Job kann weiterhin manuell (nicht automatisch während des Boot-/Anmeldevorgangs) gestartet werden.grep -rn apache /private/var/db/launchd.db
und nur ein Ergebnis gefunden. Es ist deaktiviert. Ich muss herausfinden, wie dieser Dienst gestartet wird und wie ich ihn wirklich deaktivieren kann.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 für launchctl und die Option „-w“ unter dem Befehl „load“. Wenn Sie also einfach die Datei untersuchen, erfahren Sie nicht, 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 immer noch bei Bedarf mit "launchctl start org.apache.httpd.plist" starten.
Wenn das nicht funktioniert, versuchen Sie "launchctl remove org.apache.httpd.plist", was Sie nicht manuell starten lässt.
Elliot
/usr/sbin/apachectl stop
aber ich weiß immer noch nicht, wie ich ihn nach jedem Neustart deaktivieren kann.Vivek
launchctl unload
(obwohl ich nicht weiß, ob Sie dazu den Pfad zur plist angeben müssen), (ii) wenn es in Ihren Login-Objekten enthalten ist , verwenden Sie das Systemeinstellungen-Tool --> "Benutzer und Gruppen" --> "Anmeldeobjekte" --> Anstößigen Eintrag löschen, falls gefunden.