В чем разница между SIGSTOP и SIGTSTP?

Ответы:

154

Оба сигнала предназначены для приостановки процесса, который в конечном итоге будет возобновлен SIGCONT. Основные различия между ними:

  • SIGSTOPэто сигнал , посылаемый программно (например , kill -STOP pid) , а SIGTSTP(для сиг конечной - т erminal остановки ) также может быть послан через ttyдрайвер абонентские , набрав на клавиатуре, как правило , Control- Z.

  • SIGSTOPнельзя игнорировать. SIGTSTPвозможно.

Jlliagre
источник
10
Фактоид: если вы программист под Linux, SIGTSTP - это то, что вы получаете, когда используете Ctrl-Z для прерывания процесса, запущенного в оболочке, не убивая его. Обычно это приводит к тому, что оболочка помещает его в список приостановленных заданий.
simpleuser
@Archer Я не уверен, что понял ваш комментарий. Вы имеете в виду, что верите, что Control-Zэто не срабатывает, SIGTSTPили вы думаете, что не должно?
jlliagre
@jlliagre Я провел более подробный обзор, и оказалось, что вы правы. Я удалил предыдущий комментарий.
Archer
@Archer Хорошо, я думаю, вы были сбиты с толку терминологией справочной страницы. terminal stopозначает ТСТП.
jlliagre
@jlliagre Я хочу, но система не позволяет этого, она говорит, что я могу отменить отрицательный голос, только если ответ будет отредактирован ...
Арчер
40

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

#define SIGSTOP     19  /* Stop, unblockable (POSIX).  */
#define SIGTSTP     20  /* Keyboard stop (POSIX).  */
Ройс Чао
источник
6
В Solaris 10 сигналы определены в файле заголовка/usr/include/sys/iso/signal_iso.h
Кент Павар
2
В FreeBSD 11 это/usr/include/sys/signal.h
Грег Шмит
1

Целевой процесс не может игнорировать сигнал SIGSTOP.

Хорошим примером этого является видеоплеер mpv, он может игнорировать, SIGTSTPно не может SIGSTOP.

Вы можете протестировать с запущенным видео:

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

Конечно, kill -SIGCONT $(pidof mpv)чтобы продолжить игру.

Боб Дилан
источник