So beenden Sie Prozesse, die nicht auf -9 reagieren

9

Ich sehe Prozesse auf meinem SGI Altix 450, auf denen SLES 10.1 ausgeführt wird, scheinbar nicht mehr ausgeführt werden (dh stundenlang keine weitere Ausgabe in den Protokollen bereitstellen). An dieser Stelle möchte ich den fehlerhaften Prozess beenden, damit ich ihn neu starten kann. Oben zeigt, dass sich der Prozess im Status (R) befindet. Obwohl, wenn ich versuche, es zu töten, nichts passiert. Selbst wenn ich kill -9 benutze, bleibt es immer noch. Was kann ich in diesem Fall tun, außer den Computer neu zu starten?

Jared Brown
quelle
2
Sind sie definitiv die gleiche Prozess-ID? Es ist nicht so, dass Sie den Prozess beenden und ein Daemon einen Prozess mit demselben Namen neu startet?
CK.

Antworten:

9

Es ist möglich, dass der Prozess abgebrochen wird, aber darauf gewartet wird, dass das übergeordnete Element seinen Rückgabewert erfasst. In diesem Fall befindet es sich nach dem Töten im Zustand 'Z' und nicht im Zustand 'R'. In diesem Fall sollten Sie den ppidProzess mithilfe des psBefehls finden und auch den übergeordneten Prozess beenden (wenn Sie wirklich sicher sind, dass er keine Probleme verursacht).

Der andere Fall könnte sein, dass der Prozess aus irgendeinem Grund neu gestartet wird, nachdem er wie tty getötet wurde. In diesem Fall sollte sich die Prozess-ID jedes Mal ändern, wenn Sie -9 beenden. Überprüfen Sie, ob sich die Prozess-ID jedes Mal ändert, wenn Sie versuchen, sie zu beenden.

Saurabh Barjatiya
quelle
Ich glaube, ich versuche, den übergeordneten Prozess zu beenden. Es ist der übergeordnete Prozess, der sich im Status (R) befindet. pstree bestätigt dies. Die untergeordneten Prozesse befinden sich alle in (Z) Zombie-Zuständen. Die ppid bleibt statisch, daher glaube ich nicht, dass sie einfach neu gestartet wird.
Jared Brown
Wenn Sie den übergeordneten Prozess (und den übergeordneten Prozess usw.) beenden, wird init übergeordnet zu den untergeordneten Prozessen, die sich im Status 'Z' befinden, und erfasst deren Rückgabewert. Der beste Weg, um 'Z'-Kinder zu entfernen, deren Eltern ihren Rückgabewert nicht annehmen, besteht darin, auch Eltern zu töten, damit init Eltern von toten Kindprozessen wird.
Saurabh Barjatiya
Dies ist das Problem, das ich habe. Das Senden eines -9-Signals über Kill an den übergeordneten Prozess beendet es nicht.
Jared Brown
1
Manchmal reicht es aus, SIGHUP an die Eltern zu senden. Sie müssen nicht immer die Eltern töten.
Thomas
2
Es tut mir leid, SIGCHLD. (zu früh am Morgen)
Thomas
2

Der Prozess wartet auf eine Systemressource, vielleicht NFS? das erlaubt es nicht, loszulassen. Würde gerne einige Lösungen dafür hören, die über meine hinausgehen ...

Starten Sie die Box neu oder lassen Sie den Prozess herumstehen.

Ich frage mich, ob Sie den Prozess möglicherweise über kill -STOP {PID} stoppen können, um zu verhindern, dass mehr CPU verbraucht wird.

Ein Neustart sollte auch bei einem anderen angehaltenen Prozess möglich sein, erfordert jedoch möglicherweise einen Listenport oder ein gemeinsam genutztes Speichersegment, das vom anderen Prozess noch verwendet wird.

ericslaw
quelle
1
Wäre ein Prozess, der auf NFS oder eine E / A-Funktion gewartet hat, nicht in einem (D) -Zustand? Diese Prozesse befinden sich in einem (R) -Zustand.
Jared Brown
Genau das passiert mir manchmal, wenn ich den lsBefehl auf einem s3fs-Mount ausführe. Der lsProzess wird nicht einmal mit töten, kill -9bis ich das Absteigen mitumount -l
Marco Marsala
0

Hast du dmesg schon überprüft? Ich habe das nach einer Kernel-Panik gesehen; Die einzige Möglichkeit zur Wiederherstellung besteht darin, neu zu starten (vorzugsweise bald) - und dann einen gepatchten Kernel zu erhalten.

Normale nicht abtötbare Prozesse befinden sich im D-Zustand, nicht in R.

derobert
quelle
Kann etwas anderes als der Neustart gegen die harten Prozesse im D-Zustand unternommen werden? ppid = 1
Prof. Moriarty