我一直认为Ctrl-Z
在终端中(在规范模式下)会生成SIGSTOP
,但根据man 3 tcsetattr
,它会生成SIGTSTP
。但是,在这两种情况下,SIGCONT
都用于恢复停止的进程。
Ctrl-Z
不生成的原因是什么SIGSTOP
?是否存在一种情况,程序以SIGTSTP
不同于 的方式处理是有用的SIGSTOP
?
答案1
与 KILL 一样,STOP 不能被捕获、阻止或忽略:它总是停止接收进程。另一方面,TSTP 可以被忽略或以不同的方式处理;例如,shell 和 Emacs,设置 TSTP 处理程序来处理CtrlZ它们自己。 shell 中的这种行为可确保按下CtrlZ始终安全,并且不会让您陷入进程已停止且无法恢复的终端。