【问题标题】:What is the difference between SIGSTOP and SIGTSTP?SIGSTOP 和 SIGTSTP 有什么区别?
【发布时间】:2012-08-06 21:05:49
【问题描述】:

只是想知道 SIGSTOP 和 SIGTSTP 信号之间的区别。

【问题讨论】:

    标签: unix signals signal-handling


    【解决方案1】:

    这两个信号都旨在暂停一个最终将通过SIGCONT 恢复的进程。它们之间的主要区别是:

    • SIGSTOP 是以编程方式发送的信号(例如:kill -STOP pid),而SIGTSTP(对于 signal - t终端stop)也可以通过tty 驱动程序由用户在键盘上键入,通常是Control-Z

    • SIGSTOP 不能忽略。 SIGTSTP 可能是。

    【讨论】:

    • Factoid:如果你是一个 linux 程序员,当你使用 Ctrl-Z 中断在 shell 中运行的进程而不杀死它时,你会得到 SIGTSTP。这通常会导致 shell 将其置于挂起的作业列表中。
    • @Archer 我不确定你的评论是否理解。你的意思是你相信Control-Z 不会触发SIGTSTP 还是你认为它不应该触发?
    • @jlliagre 我做了一个更仔细的调查,结果证明你是对的。我删除了之前的评论。
    • @Archer 好吧,我猜你被手册页的术语弄糊涂了。 terminal stop 表示 TSTP。
    • @jlliagre 我想,但系统不允许,它说如果答案被编辑,我只能取消否决...
    【解决方案2】:

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

    #define SIGSTOP     19  /* Stop, unblockable (POSIX).  */
    #define SIGTSTP     20  /* Keyboard stop (POSIX).  */
    

    【讨论】:

    • 在 Solaris 10 上,信号定义在头文件 /usr/include/sys/iso/signal_iso.h
    • 在 FreeBSD 11 中它位于 /usr/include/sys/signal.h
    【解决方案3】:

    SIGSTOP 不能被目标进程忽略。

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

    您可以通过正在运行的视频进行测试:

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

    当然kill -SIGCONT $(pidof mpv) 继续播放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      • 2015-03-26
      相关资源
      最近更新 更多