Warum kann dieser Prozess nicht beendet werden?

Ö

Erst kürzlich bin ich auf ein Problem gestoßen, bei dem mein Netzwerkprogramm keine Verbindung zu einem Port herstellen konnte, weil es bereits verwendet wurde. Ich öffnete den Aktivitätsmonitor und stellte fest, dass er (mit dem Namen "Server") bereits zuvor ausgeführt wurde, obwohl ich das Fenster geschlossen hatte und er angeblich beendet wurde. Beenden oder Beenden des Prozesses erzwingen tun nichts. Ich habe sogar den Computer neu gestartet, aber es war immer noch da! Das ist mir bei meinem Programm noch nie passiert. Ich habe sogar im Terminal eingegeben kill 4517und nichts passiert. Hilfe?

Wenn der Prozess nach dem Neustart automatisch wieder angezeigt wird, hat "etwas" ihn für Sie neu gestartet. Um was für ein „Netzwerkprogramm“ handelt es sich hier?

Antworten (2)

OS X verwendet ein Prozessstartsystem namens launchd , das Funktionen konsolidiert, die von Init-Skripten, crontab und mehr in *nix-Systemen bereitgestellt werden (siehe den Wikipedia-Artikel für eine allgemeine Übersicht und Apples Entwicklerdokumentation zu Startdämonen und -agenten für Details). Eine der Fähigkeiten von launchd besteht darin, einen von ihm gestarteten Prozess am Leben zu erhalten, wenn dies in seiner Konfigurationsdatei so definiert ist – in diesem Fall wird der Prozess neu gestartet, wenn er beendet wird. Ihr Problem mit einem Prozess, der anscheinend über Neustarts und manuelle Beendigung hinweg bestehen bleibt, klingt sehr nach einem Fall von launchd- initiiertem Prozess mit einem keepAliveSchlüssel.

launchd- Konfigurationsdateien sind im plist- Format und zu finden in

  • ~/Library/LaunchAgents– Agenten nur für das aktuelle Benutzerkonto
  • /Library/LaunchAgentsund /Library/LaunchDaemons– Agenten und Daemons für alle Benutzerkonten
  • /System/Library/LaunchAgentsund /System/Library/LaunchDaemons– Agenten und Daemons auf Systemebene

und werden normalerweise in umgekehrter Domänenschreibweise ( tld.domain.process.plist) benannt. Abhängig davon, ob das Benutzerkonto von serverIhnen gehört oder nicht (kann ich nicht sagen, da Sie es ausgeblendet haben), sollten Sie an einem der ersten beiden Orte oben nach einer wahrscheinlichen plist suchen (wenn Sie Xcode installiert haben, können Sie sie einfach per QuickLook suchen ). Wenn es gefunden wird, serverwird es tatsächlich von launchd gesteuert. Das richtige Verfahren, um es zu stoppen, besteht darin, es aus der Prozessliste von launchd zu entfernen

launchctl unload <tld.domain.process>

Dadurch wird der Prozess entladen und gestoppt (beachten Sie, dass Sie das plistSuffix weglassen).

Es gibt auch eine GUI für den Umgang mit Launchd- Dateien, Peter Borgs Lingon (stellen Sie sicher, dass Sie „Lingon“ bekommen, nicht „Lingon 3“, das eine abgespeckte Version ist, die sicher für Vanilla-Nutzung ist), was bequemer sein könnte, als manuell durch die zu rooten Dateispeicherorte.

Probieren Sie es aus.

    sudo kill -9 4517

Wobei 4517 die PID des Prozesses ist.

Wenn der Prozess mit einer neuen PID zurückkommt, wurde er neu gestartet. Siehe kopischkes Antwort, wie man damit umgeht.