Mithilfe von Putty auf meinem Vista-Rechner habe ich mich bei meinem Entwicklungsserver (Ubuntu) angemeldet und den Django-Testserver gestartet. Er betreibt einen Apache-ähnlichen Server, um meine Web-App zu testen. Die App läuft unter meiner internen IP-Adresse, auf Port 8080. Ich kann sie über einen Webbrowser öffnen und zu navigieren 192.168.0.130:8080
.
Ich habe meinen Computer für eine Weile (physisch) verlassen und als ich zurückkam, musste ich feststellen, dass die Putty-Verbindung abgelaufen war. Kein großes Problem, ich habe mich einfach wieder beim Server angemeldet. Wenn ich jetzt jedoch versuche, den Django-Testserver auszuführen, wird angezeigt, dass der Port bereits verwendet wird. Das bedeutet (glaube ich), dass die erste Testserverinstanz immer noch auf Port 8080 ausgeführt wird.
Wie beende ich diesen Prozess? Wie sieht der Prozess überhaupt aus? Ich habe Folgendes getan ps aux
und habe das Gefühl, dass dies der fehlerhafte Prozess ist:
garfonzo 5719 0.3 0.0 0 0 ? D 08:58 1:07 [python]
Da ich den Server heute Morgen ungefähr um diese Zeit gestartet habe und Django auf Python basiert, passiert jedoch kill 5719
nichts – der Prozess wird nicht beendet und ich kann den Testserver immer noch nicht starten.
Irgendwelche Ideen!?
BEARBEITEN-- für mehr Details:
Ich habe es auch ausgeführt netstat -tulpn
und die Ausgabe ist diese:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.130:8080 0.0.0.0:* LISTEN -
Ist das nicht praktisch? Der eine Port, dessen Prozess-ID ich wissen möchte, hat keine PID!
Antwort1
Wenn Sie ziemlich sicher sind, dass dies der richtige Prozess ist (was wahrscheinlich ist) - und da netstat Ihnen nichts Nützliches sagt, dann können Sie verwenden
kill -9 5719
Der Schalter -9 sendet ein SIGKILL-Signal anstelle des Standardsignals SIGTERM, wodurch der Prozess gestoppt wird, wenn er gestoppt werden kann.
Das SIGTERM-Signal wird an den Prozess gesendet und fordert ihn effektiv zum Herunterfahren auf. Ein Prozess kann sich dafür entscheiden, SIGTERM abzufangen und etwas ganz anderes zu tun.
Das SIGKILL-Signal hingegen wird nicht an den Prozess weitergeleitet und kann daher nicht ignoriert werden. Der Kernel beendet den Prozess sofort und sollte daher nur als letztes Mittel verwendet werden, da es dem Prozess keine Gelegenheit zum Aufräumen gibt.
Wenn der Prozess eine E/A-Blockierung aufweist, kann er möglicherweise nicht mit SIGKILL gestoppt werden. In diesem Fall handelt es sich um einen Zombie-Prozess und zum Löschen ist möglicherweise ein Neustart erforderlich.
Erläuterung: Ein Prozess kann nicht beendet werden, wenn er auf E/A wartet, da dies zu einem hängenden Rückruf für die Kernelfunktion führen würde, die die besagten E/A ausführt.
Oder, wenn der übergeordnete Prozess nicht aufruft wait
, bleibt der Prozess ein Zombie-Prozess. Eine gute Übersicht über tote Prozesse finden Sie unterhttp://www.linuxsa.org.au/tips/zombies.html.
Was sind das für Zombieprozesse, die in PS auftauchen? Ich töte sie, aber sie verschwinden nicht!
Zombies sind tote Prozesse. Tote kann man nicht töten. Alle Prozesse sterben irgendwann und werden dann zu Zombies. Sie verbrauchen fast keine Ressourcen, was zu erwarten ist, da sie tot sind! Der Grund für Zombies ist, dass der übergeordnete Prozess des Zombies den Beendigungsstatus und die Ressourcennutzungsstatistiken des Zombies abrufen kann. Der übergeordnete Prozess signalisiert dem Betriebssystem, dass es den Zombie nicht mehr benötigt, indem er einen der wait()-Systemaufrufe verwendet.
Wenn ein Prozess stirbt, werden alle seine Kindprozesse zu Kindern von Prozess Nummer 1, dem Init-Prozess. Init wartet „immer“ darauf, dass Kinder sterben, damit sie nicht als Zombies zurückbleiben.
Wenn Sie Zombieprozesse haben, bedeutet das, dass der übergeordnete Prozess nicht auf diese Zombies gewartet hat (sehen Sie sich die von ps -l angezeigte PPID an). Sie haben drei Möglichkeiten: Reparieren Sie den übergeordneten Prozess (lassen Sie ihn warten); beenden Sie den übergeordneten Prozess; oder leben Sie damit. Denken Sie daran, dass das Leben damit nicht so schwer ist, da Zombies kaum mehr als eine zusätzliche Zeile in der Ausgabe von ps beanspruchen.