Quelle est la différence entre SIGSTOP et SIGTSTP?

103

Je me demande juste la différence entre les signaux SIGSTOP et SIGTSTP.

utilisateur1419715
la source

Réponses:

153

Les deux signaux sont conçus pour suspendre un processus qui sera finalement repris avec SIGCONT. Les principales différences entre eux sont:

  • SIGSTOPest un signal envoyé par programme (par exemple :)kill -STOP pid tandis que SIGTSTP(pour sig nal - t erminal stop ) peut également être envoyé via le ttypilote par un utilisateur tapant sur un clavier, généralement Control- Z.

  • SIGSTOPNe peut pas être ignoré. SIGTSTPpourrait être.

jlliagre
la source
10
Factoid: Si vous êtes un programmeur Linux, SIGTSTP est ce que vous obtenez lorsque vous utilisez Ctrl-Z pour interrompre un processus en cours d'exécution dans un shell sans le tuer. Cela amène généralement le shell à le mettre sur une liste de travaux suspendus.
simpleuser
@Archer Je ne suis pas sûr de comprendre votre commentaire. Croyez-vous que Control-Zcela ne déclenche pas SIGTSTPou pensez-vous que cela ne devrait pas?
jlliagre
@jlliagre J'ai fait une enquête plus approfondie, et il s'est avéré que vous aviez raison. J'ai supprimé le commentaire précédent.
Archer
@Archer Ok, je suppose que vous étiez confus par la terminologie de la page de manuel. terminal stopsignifie TSTP.
jlliagre le
@jlliagre Je veux, mais le système ne le permettra pas, il dit que je ne peux annuler le vote négatif que si la réponse est modifiée…
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
la source
6
Sur Solaris 10, les signaux sont définis dans le fichier d'en-tête/usr/include/sys/iso/signal_iso.h
Kent Pawar
2
Dans FreeBSD 11, c'est à/usr/include/sys/signal.h
Greg Schmit
1

SIGSTOP ne peut pas être ignoré par le processus ciblé.

Un bon exemple de cela est le lecteur vidéo mpv, il peut ignorer SIGTSTPmais pas SIGSTOP.

Vous pouvez tester avec une vidéo en cours d'exécution:

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

Bien sûr kill -SIGCONT $(pidof mpv)pour reprendre la lecture.

Bob Dylan
la source