J'ai donc eu quelques scripts PHP en cours d'exécution à partir de la ligne de commande, et je voulais les arrêter.
L'Iran
$ ps aux | grep php
$ sudo kill 8754
$ sudo kill 8767
Et puis a couru
$ ps aux | grep php
à nouveau pour vérifier que les processus se sont terminés mais ont obtenu ce type de sortie:
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
J'ai recherché ce que le T voulait dire dans la colonne d'état et j'ai découvert que cela signifie arrêté, mais je ne comprends pas ce que cela signifie que le processus fait.
Je sais que vous pouvez créer votre propre gestion du signal en PHP, mais je ne l'ai pas fait, donc quand PHP reçoit un signal SIGTERM, que fait-il?
Que fait un processus arrêté (le cas échéant)?
kill $pid
exemple) alors qu'il était arrêté, il répondra alors (tardivement) à ce TERM et se terminera.kill 8754
ce qui devrait entraîner la fin du processus, n'est-ce pas? Savez-vous dans quel état se trouverait un processus pendant qu'il se termine? Étant donné que le processus est entré dans l'état STOP, comme s'il avait reçu un signal STOP dekill -STOP 8754
, cela pourrait-il également se produire s'il avait reçu un signal TERM?TERM
signal tant qu'il ne sera pas poursuivi. Il s'arrêtera immédiatement s'il reçoit unKILL
signal, même à l'arrêt. Je suppose qu'un processus sera à l'état d'exécution lorsqu'il se terminera. Je ne suis pas très familier avec PHP, et je ne sais pas pourquoi un processus s'est arrêté, désolé. Généralement, cependant, les processus ne s'arrêtent pas mais se terminent lorsqu'ils reçoiventTERM
.Le processus arrêté sous Linux / Unix est un processus / tâche qui a reçu un signal de suspension (
SIGSTOP
/SIGTSTP
) qui indique au noyau de ne pas effectuer de traitement sur celui-ci car il a été arrêté, et il ne peut reprendre son exécution que s'il reçoit leSIGCONT
signal.Le processus essentiellement arrêté attend un signal de continuation du noyau, de la même manière qu'un processus suspendu attend une condition de réveil du noyau.
Crédits image: polytechnique.fr
Chaque processus dans le noyau Linux est représenté par une
task_struct
structure de données et chaquetask
vecteur consiste en un tableau de pointeurs vers chacuntask_struct
. qui décrit un processus ou une tâche dans le système (que ce soitunrunnable
,runnable
oustopped
). Voir: Processus et structures de données Linux ) pour plus de détails.Voir aussi: Le noyau Linux: gestion des processus
la source