SIGSTOP和SIGTSTP有什么区别?


Answers:


153

两种信号都旨在中止过程,最终将通过恢复该过程SIGCONT。它们之间的主要区别是:

  • SIGSTOP是信号发送编程(例如:kill -STOP pid),而SIGTSTP(对于SIG NAL - 端子停止),也可以通过发送tty驱动器由用户在键盘上打字,通常是Control- Z

  • SIGSTOP不容忽视。SIGTSTP可能。


10
Factoid:如果您是Linux程序员,那么使用Ctrl-Z中断Shell中运行的进程而不杀死它时,您会得到SIGTSTP。这通常会使Shell将其放在挂起的作业列表上。
simpleuser 2015年

@Archer我不确定您的评论。您是说您相信Control-Z不会触发SIGTSTP还是应该不会触发?
jlliagre

@jlliagre我进行了仔细的调查,结果发现您是对的。我删除了之前的评论。
阿切尔

@Archer好吧,我的猜测是您对手册页术语感到困惑。terminal stop表示TSTP。
jlliagre

@jlliagre我想要,但是系统不允许这样做,它说我只能在编辑答案后取消取消投票…
Archer

39

/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
Kent Pawar

2
在FreeBSD 11中,它位于/usr/include/sys/signal.h
Greg Schmit,

1

目标进程不能忽略SIGSTOP。

视频播放器就是一个很好的例子mpv,它可以忽略SIGTSTP但不能忽略SIGSTOP

您可以运行以下视频进行测试:

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

当然kill -SIGCONT $(pidof mpv)要恢复比赛了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.