¿Qué es un proceso detenido en Linux?


12

Así que tenía algunos scripts PHP ejecutándose desde la línea de comandos, y quería detenerlos.

corrí

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

Y luego corrió

$ ps aux | grep php

nuevamente para verificar que los procesos habían terminado pero obtuvieron este tipo de salida:

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

Yo busqué lo que significó la T en la columna de estado y descubrió que si está parado, pero no entiendo lo que significa que el proceso está haciendo.

Sé que puedes crear tu propio manejo de señales en PHP, pero no lo he hecho, así que cuando PHP recibe una señal SIGTERM, ¿qué hace?

¿Qué está haciendo un proceso detenido (si hay algo)?

Respuestas:


15

Significa que el proceso ha recibido una STOPseñal, y no hará nada hasta que reciba una CONTseñal, ni siquiera termine.

La fuente más común de STOPseñales es el usuario golpeando ^zmientras el proceso está en primer plano, y la forma común de enviar un CONTmensaje posterior es escribiendo fgo bgque continúan el proceso en primer plano y en segundo plano, respectivamente.

Otra forma de enviar STOPa un proceso es kill -STOP $pid. Del mismo modo, CONTse puede enviar a un proceso con kill -CONT $pid.

Como envió TERMseñales a los procesos, supongo que desea que finalicen. Para que eso suceda, los procesos deben recibir CONTseñales. Puede enviarlos escribiendo kill -CONT 8754 8767en una ventana de terminal.


¿Enviar una señal CONT permitiría que el script se ejecute hasta que se haya completado? ¿O causaría que el script finalice de inmediato?
Jon

El proceso continúa lo que estaba haciendo (antes de PARAR) al recibir un CONT. Sin embargo, si envió un TÉRMINO (por kill $pidejemplo) mientras estaba detenido, responderá (tardíamente) a ese TÉRMINO y terminará.
Eroen

Hmm, así que envié un término mediante la ejecución kill 8754que hace que el proceso para terminar el tiempo correcto? ¿Sabes en qué estado estaría un proceso mientras se va terminando? Dado que el proceso entró en el estado STOP, como si hubiera recibido una señal STOP kill -STOP 8754, ¿podría suceder eso si se le enviara una señal TERM?
Jon

Un proceso detenido no terminará debido a una TERMseñal hasta que continúe. Terminará inmediatamente si recibe una KILLseñal, incluso mientras está parado. Supongo que un proceso estará en estado de ejecución cuando finalice. No estoy muy familiarizado con PHP, y no sé cómo explicar por qué se detuvo un proceso, lo siento. Sin embargo, en general, los procesos no se detienen sino que terminan cuando se reciben TERM.
Eroen

4

El proceso detenido en Linux / Unix es un proceso / tarea que recibió la señal de suspensión ( SIGSTOP/ SIGTSTP) que le indica al kernel que no realice ningún procesamiento en él, ya que se ha detenido, y solo puede reanudar su ejecución si se le envía la SIGCONTseñal.

Básicamente, el proceso detenido espera una señal de continuación del núcleo, de manera similar a como el proceso suspendido espera una condición de activación del núcleo.

Estados del proceso del kernel de Linux: Listo, En ejecución, Detenido, Suspendido, Rastreado, Zombi

Créditos de imagen: polytechnique.fr


Cada proceso en el kernel de Linux está representado por una task_structestructura de datos y cada taskvector consiste en una matriz de punteros para cada uno task_struct. que describe un proceso o tarea en el sistema (ya sea unrunnable, runnableo stopped). Consulte: Procesos y estructuras de datos de Linux ) para obtener más detalles.

Ver también: El kernel de Linux: gestión de procesos


@Jus Gracias por el informe, lo he corregido.
kenorb
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.