Was ist ein gestoppter Prozess unter Linux?

12

Ich hatte also einige PHP-Skripte, die über die Befehlszeile ausgeführt wurden, und wollte, dass sie nicht mehr ausgeführt werden.

ich rannte

$ ps aux | grep php
$ sudo kill 8754
$ sudo kill 8767

Und dann rannte

$ ps aux | grep php

erneut, um zu überprüfen, ob die Prozesse beendet wurden, aber diese Art von Ausgabe erhalten haben:

jon      8754  0.4 53.5 3044256 2205204 ?     T    10:34   0:15 php awesome_script.php
jon      8767  0.4 53.5 3044256 2205204 ?     T    10:34   0:15 php awesome_script.php
jon     12275  0.0  0.0   4156   892 pts/1    S+   11:27   0:00 grep --color=auto php

Ich habe in der Spalte "Status" nachgeschlagen, was das T bedeutet, und festgestellt, dass es "Gestoppt" bedeutet, aber ich verstehe nicht, was dies bedeutet, dass der Prozess ausgeführt wird.

Ich weiß, dass Sie in PHP Ihre eigene Signalverarbeitung erstellen können , aber das habe ich noch nicht getan. Wenn PHP also ein SIGTERM-Signal empfängt , was macht es dann?

Was macht ein gestoppter Prozess (wenn überhaupt)?

Jon
quelle

Antworten:

15

Dies bedeutet, dass der Prozess ein STOPSignal empfangen hat und nicht viel tut, bis er ein CONTSignal empfängt und nicht einmal beendet.

Die häufigste STOPSignalquelle ist das Schlagen des Benutzers, ^zwährend sich der Prozess im Vordergrund befindet, und die übliche Art, eine Folge zu senden, CONTist die Eingabe fgoder bgdie Fortsetzung des Prozesses im Vordergrund bzw. im Hintergrund.

Eine andere Möglichkeit, STOPan einen Prozess zu senden , ist kill -STOP $pid. Ebenso CONTkann an einen Prozess mit gesendet werden kill -CONT $pid.

Da Sie TERMSignale an die Prozesse gesendet haben, gehen Sie davon aus, dass diese beendet werden sollen. Dazu müssen die Prozesse CONTSignale empfangen . Sie können diese senden, indem Sie kill -CONT 8754 8767in ein Terminalfenster eingeben .

Eroen
quelle
Würde das Senden eines CONT-Signals das Ausführen des Skripts ermöglichen, bis es abgeschlossen ist? Oder würde das Skript sofort beendet?
Jon
Der Prozess setzt seine Arbeit (vor STOP) nach Erhalt eines CONT fort. Wenn Sie ein TERM gesendet haben ( kill $pidz. B. von), während es gestoppt wurde, reagiert es (verspätet) auf dieses TERM und wird beendet.
Eroen
Hmm, also habe ich ein TERM gesendet, indem ich ausgeführt habe, kill 8754was dazu führen sollte, dass der Prozess irgendwann beendet wird, oder? Wissen Sie, in welchem ​​Zustand sich ein Prozess befinden würde, während er sich dem Ende nähert? Könnte kill -STOP 8754dies auch passieren, wenn der Prozess in den STOP-Zustand eingetreten ist, als hätte er ein STOP-Signal von empfangen , wenn ihm ein TERM-Signal gesendet wurde?
Jon
Ein gestoppter Prozess wird aufgrund eines TERMSignals erst beendet, wenn er fortgesetzt wird. Es endet mit sofortiger Wirkung , wenn es ein empfängt KILLSignal, auch während gestoppt. Ich gehe davon aus, dass sich ein Prozess beim Beenden im Status "Ausführen" befindet. Ich bin mit PHP nicht sehr vertraut und weiß nicht, wie ich feststellen soll, warum ein Prozess gestoppt wurde. Im Allgemeinen werden Prozesse jedoch nicht gestoppt, sondern beendet, wenn sie empfangen werden TERM.
Eroen
4

Der gestoppte Prozess unter Linux / Unix ist ein Prozess / eine Task, der ein Suspend-Signal ( SIGSTOP/ SIGTSTP) empfangen hat, das den Kernel anweist, keine Verarbeitung durchzuführen, da er gestoppt wurde. Die Ausführung kann nur fortgesetzt werden, wenn das SIGCONTSignal gesendet wird.

Grundsätzlich wartet der gestoppte Prozess auf ein Fortsetzungssignal vom Kernel, ähnlich wie der angehaltene Prozess auf eine Aufweckbedingung vom Kernel wartet.

Der Prozess des Linux-Kernels lautet: Bereit, Wird ausgeführt, Angehalten, Angehalten, Verfolgt, Zombie

Bildnachweis: polytechnique.fr


Jeder Prozess im Linux-Kernel wird durch eine task_structDatenstruktur dargestellt, und jeder taskVektor besteht aus einem Array von Zeigern auf jeden task_struct. die beschreibt einen Prozeß oder Task im System (entweder es ist unrunnable, runnableoder stopped). Weitere Informationen finden Sie unter: Prozesse und Linux-Datenstrukturen .

Siehe auch: Der Linux-Kernel: Prozessmanagement

Kenorb
quelle
@Jus Danke für den Bericht, ich habe ihn korrigiert.
Kenorb