Was ist der Unterschied zwischen SIGSTOP und SIGTSTP?

103

Ich wundere mich nur über den Unterschied zwischen SIGSTOP- und SIGTSTP-Signalen.

user1419715
quelle

Antworten:

153

Beide Signale dienen dazu, einen Prozess auszusetzen, der schließlich wieder aufgenommen wird SIGCONT. Die Hauptunterschiede zwischen ihnen sind:

  • SIGSTOPist ein Signal , programmatisch (zB: gesendet kill -STOP pid) , während SIGTSTP(für sig nal - t erminal Stopp ) kann auch durch die gesendet werden ttyFahrer von einem Benutzer auf einer Tastatur tippen, in der Regel Control- Z.

  • SIGSTOPKann nicht ignoriert werden. SIGTSTPkönnte sein.

jlliagre
quelle
10
Faktoid: Wenn Sie ein Linux-Programmierer sind, erhalten Sie SIGTSTP, wenn Sie mit Strg-Z einen in einer Shell ausgeführten Prozess unterbrechen, ohne ihn zu beenden. Dies führt normalerweise dazu, dass die Shell sie in eine angehaltene Jobliste einfügt.
simpleuser
@Archer Ich bin mir nicht sicher, ob ich deinen Kommentar verstehe. Meinen Sie damit, dass Sie glauben, dass Control-Zes nicht auslöst, SIGTSTPoder denken Sie, dass dies nicht der Fall sein sollte?
Jlliagre
@jlliagre Ich habe eine genauere Umfrage durchgeführt, und es stellte sich heraus, dass Sie Recht haben. Ich habe den vorherigen Kommentar gelöscht.
Archer
@Archer Ok, ich vermute, Sie waren durch die Terminologie der Handbuchseite verwirrt. terminal stopbedeutet TSTP.
Jlliagre
@jlliagre Ich möchte, aber das System lässt es nicht zu, es heißt, ich kann die Abwertung nur abbrechen, wenn die Antwort bearbeitet wird ...
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
quelle
6
Unter Solaris 10 werden die Signale in der Header-Datei definiert/usr/include/sys/iso/signal_iso.h
Kent Pawar
2
In FreeBSD 11 ist es um/usr/include/sys/signal.h
Greg Schmit
1

SIGSTOP kann vom Zielprozess nicht ignoriert werden.

Ein gutes Beispiel dafür ist der Video-Player mpv, den er ignorieren kann, SIGTSTPaber nicht SIGSTOP.

Sie können mit einem laufenden Video testen:

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

Natürlich kill -SIGCONT $(pidof mpv), um das Spiel fortzusetzen.

Bob Dylan
quelle