![如何在子 shell 退出之前停止子 shell 的子进程(根据 SIGSTOP)?](https://linux22.com/image/145055/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%AD%90%20shell%20%E9%80%80%E5%87%BA%E4%B9%8B%E5%89%8D%E5%81%9C%E6%AD%A2%E5%AD%90%20shell%20%E7%9A%84%E5%AD%90%E8%BF%9B%E7%A8%8B%EF%BC%88%E6%A0%B9%E6%8D%AE%20SIGSTOP%EF%BC%89%EF%BC%9F.png)
在bash中,当运行时( sleep 123 &)
,sleep 123
当子shell退出时,进程将继续运行。如何sleep 123
在其父子 shell 退出之前停止该进程?
我正在尝试查看该sleep 123
进程是否会因接收SIGHUP
和 而终止SIGCONT
。我正在寻找一个例子SIGHUP 是否发送到这个孤立进程,为什么它不终止?和默认情况下,内核是否会向成为孤立进程并包含已停止进程的进程组发送 SIGHUP 来终止所有进程?
答案1
这将显示您试图说明的行为:
(sleep 60 & kill -STOP $!)
这会sleep
进入后台,然后停止它。SIGHUP
当子 shell 退出时,它就会被杀死。
信号可以中断一些系统调用;看联机signal(7)
帮助页(特别是“信号处理程序中断系统调用和库函数”部分)。当调用信号处理程序时,特别使用的系统调用sleep
会被中断,这记录在sleep(3)
。