linux下SIGSTOP和SIGTSTP信号的副作用

    众所周知,在Linux中,kill -19(SIGSTOP) 或者 kill -20(SIGTSTP) 是暂停进程,kill -18(SIGCONT )是继续进程,但今天在做实验的时候,意外发现了SIGSTOP 和SIGTSTP 的副作用,即一个程序用kill -19 或者 kill -20 后,竟然变成了后台进程(此处非守护进程),不受终端控制!

    先上图:


这是我写的一个简单的测试程序a.c生成a程序:1秒输出1个数字

成功运行后,我用killall -19 a让a程序暂停

再用killall -18 a 然后程序继续


结果程序不受终端控制了!甚至我还可以在终端输入命令!如 ls 还可以打印出当前目录。


最后只能用kill -9 a 来结束这个程序,或者关闭整个终端来结束程序。

我查了一些关于linux信号的资料,发现SIGTSTP和SIGTSTP除了本身的暂停作用,还有让进程挂起和变成后台进程的作用。

具体原因是:这两个信号会改变当前进程的进程识别码,通俗点说,这两个信号调用了setpgrp()函数,使得当前从原来的会话组组长,变成非会话组组长,会话组组长是会受到终端的控制,所以就是进程继续了也不会收到终端发来的任何信号!但是关闭整个会话(终端),这个程序也会被结束掉。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值