Qu'est-ce qu'un processus arrêté sous Linux?


12

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)?

Réponses:


15

Cela signifie que le processus a reçu un STOPsignal, et ne fera pas grand-chose jusqu'à ce qu'il reçoive un CONTsignal, même pas terminé.

La source de STOPsignaux la plus courante est l'utilisateur frappant ^zpendant que le processus est au premier plan, et la manière courante d'envoyer un CONTaprès est de taper fgou de bgcontinuer le processus au premier plan et en arrière-plan respectivement.

Une autre façon d'envoyer STOPà un processus est kill -STOP $pid. De même, CONTpeut être envoyé à un processus avec kill -CONT $pid.

Puisque vous avez envoyé des TERMsignaux aux processus, je suppose que vous voulez qu'ils se terminent. Pour cela, les processus doivent recevoir des CONTsignaux. Vous pouvez les envoyer en tapant kill -CONT 8754 8767dans une fenêtre de terminal.


L'envoi d'un signal CONT permettrait-il au script de s'exécuter jusqu'à ce qu'il soit terminé? Ou cela entraînerait-il la fin immédiate du script?
Jon

Le processus continue ce qu'il faisait (avant STOP) lors de la réception d'un CONT. Si vous avez envoyé un TERM (par kill $pidexemple) alors qu'il était arrêté, il répondra alors (tardivement) à ce TERM et se terminera.
Eroen

Hmm, j'ai donc envoyé un TERM en cours d'exécution, kill 8754ce 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 de kill -STOP 8754, cela pourrait-il également se produire s'il avait reçu un signal TERM?
Jon

Un processus arrêté ne se terminera pas en raison d'un TERMsignal tant qu'il ne sera pas poursuivi. Il s'arrêtera immédiatement s'il reçoit un KILLsignal, 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çoivent TERM.
Eroen

4

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 le SIGCONTsignal.

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.

États du processus du noyau Linux: prêt, en cours d'exécution, arrêté, suspendu, tracé, zombie

Crédits image: polytechnique.fr


Chaque processus dans le noyau Linux est représenté par une task_structstructure de données et chaque taskvecteur consiste en un tableau de pointeurs vers chacun task_struct. qui décrit un processus ou une tâche dans le système (que ce soit unrunnable, runnableou stopped). Voir: Processus et structures de données Linux ) pour plus de détails.

Voir aussi: Le noyau Linux: gestion des processus


@Jus Merci pour le rapport, je l'ai corrigé.
kenorb
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.