¿Cuál es la diferencia entre SIGSTOP y SIGTSTP?

Respuestas:

153

Ambas señales están diseñadas para suspender un proceso que eventualmente se reanudará con SIGCONT. Las principales diferencias entre ellos son:

  • SIGSTOPes una señal enviada mediante programación (por ejemplo: kill -STOP pid), mientras SIGTSTP(para sig nal - t ERMINAL parada ) puede también ser enviado a través del ttyconductor por un usuario escribir sobre un teclado, por lo general Control- Z.

  • SIGSTOPNo puede ser ignorado. SIGTSTPpuede ser.

jlliagre
fuente
10
Factoid: si es un programador de Linux, SIGTSTP es lo que obtiene cuando usa Ctrl-Z para interrumpir un proceso que se ejecuta en un shell sin matarlo. Esto generalmente hace que el shell lo coloque en una lista de trabajos suspendidos.
usuario simple
@Archer No estoy seguro de entender tu comentario. ¿Quiere decir que cree Control-Zque no se activa SIGTSTPo cree que no debería?
jlliagre
@jlliagre Hice una encuesta más detallada y resultó que tienes razón. Borré el comentario anterior.
Archer
@Archer Ok, supongo que te confundió la terminología de la página del manual. terminal stopsignifica TSTP.
jlliagre
@jlliagre Quiero hacerlo, pero el sistema no lo permite, dice que solo puedo cancelar el voto negativo si se edita la respuesta ...
Archer
39

/usr/include/x86_64-linux-gnu/bits/signum.h

#define SIGSTOP     19  /* Stop, unblockable (POSIX).  */
#define SIGTSTP     20  /* Keyboard stop (POSIX).  */
Royce Chao
fuente
6
En Solaris 10, las señales se definen en el archivo de encabezado/usr/include/sys/iso/signal_iso.h
Kent Pawar
2
En FreeBSD 11 está en/usr/include/sys/signal.h
Greg Schmit
1

SIGSTOP no puede ser ignorado por el proceso objetivo.

Un buen ejemplo de eso es el reproductor de video mpv, puede ignorarSIGTSTP pero no SIGSTOP.

Puede probar con un video en ejecución:

kill -SIGTSTP $(pidof mpv) y kill -SIGSTOP $(pidof mpv)

Por supuesto kill -SIGCONT $(pidof mpv)para seguir jugando.

Bob Dylan
fuente