Jaka jest różnica między SIGSTOP a SIGTSTP?

104

Zastanawiam się tylko nad różnicą między sygnałami SIGSTOP i SIGTSTP.

user1419715
źródło

Odpowiedzi:

154

Oba sygnały mają na celu zawieszenie procesu, który ostatecznie zostanie wznowiony SIGCONT. Główne różnice między nimi to:

  • SIGSTOPJest to sygnał wysyłany programowo (np kill -STOP pid) natomiast SIGTSTP(za sig nal - t erminal przystanku ) mogą być również przesyłane przez ttykierowcę przez użytkownika, wpisując na klawiaturze, zwykle Control- Z.

  • SIGSTOPnie może być ignorowany. SIGTSTPmoże być.

jlliagre
źródło
10
Fakt: Jeśli jesteś programistą Linuksa, SIGTSTP jest tym, co dostajesz, gdy używasz Ctrl-Z do przerwania procesu działającego w powłoce bez zabijania go. Zwykle powoduje to, że powłoka umieszcza ją na liście zawieszonych zadań.
simpleuser
@Archer Nie jestem pewien, czy rozumiem twój komentarz. Czy masz na myśli to, że uważasz, Control-Zże nie wyzwala, SIGTSTPczy myślisz, że nie powinno?
jlliagre
@jlliagre Zrobiłem dokładniejszą ankietę i okazało się, że masz rację. Usunąłem poprzedni komentarz.
Archer
@Archer Ok, domyślam się, że byłeś zdezorientowany terminologią strony podręcznika. terminal stopoznacza TSTP.
jlliagre
@jlliagre Chcę, ale system na to nie pozwala, mówi, że mogę anulować głos przeciwny tylko wtedy, gdy odpowiedź zostanie zmieniona…
Archer,
40

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

#define SIGSTOP     19  /* Stop, unblockable (POSIX).  */
#define SIGTSTP     20  /* Keyboard stop (POSIX).  */
Royce Chao
źródło
6
W systemie Solaris 10 sygnały są zdefiniowane w pliku nagłówkowym/usr/include/sys/iso/signal_iso.h
Kent Pawar
2
We FreeBSD 11 jest/usr/include/sys/signal.h
Greg Schmit,
1

SIGSTOP nie może zostać zignorowany przez docelowy proces.

Dobrym tego przykładem jest odtwarzacz wideo mpv, który może zignorować, SIGTSTPale nie SIGSTOP.

Możesz przetestować z uruchomionym wideo:

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

Oczywiście, kill -SIGCONT $(pidof mpv)żeby wznowić grę.

bob dylan
źródło