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)?
quelle
kill $pid
z. B. von), während es gestoppt wurde, reagiert es (verspätet) auf dieses TERM und wird beendet.kill 8754
was 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önntekill -STOP 8754
dies 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?TERM
Signals erst beendet, wenn er fortgesetzt wird. Es endet mit sofortiger Wirkung , wenn es ein empfängtKILL
Signal, 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 werdenTERM
.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 dasSIGCONT
Signal gesendet wird.Grundsätzlich wartet der gestoppte Prozess auf ein Fortsetzungssignal vom Kernel, ähnlich wie der angehaltene Prozess auf eine Aufweckbedingung vom Kernel wartet.
Bildnachweis: polytechnique.fr
Jeder Prozess im Linux-Kernel wird durch eine
task_struct
Datenstruktur dargestellt, und jedertask
Vektor besteht aus einem Array von Zeigern auf jedentask_struct
. die beschreibt einen Prozeß oder Task im System (entweder es istunrunnable
,runnable
oderstopped
). Weitere Informationen finden Sie unter: Prozesse und Linux-Datenstrukturen .Siehe auch: Der Linux-Kernel: Prozessmanagement
quelle