linux下SIGSTOP和SIGTSTP信号的副作用

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

    先上图:

linux下SIGSTOP和SIGTSTP信号的副作用_第1张图片

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

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

linux下SIGSTOP和SIGTSTP信号的副作用_第2张图片

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

linux下SIGSTOP和SIGTSTP信号的副作用_第3张图片

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

linux下SIGSTOP和SIGTSTP信号的副作用_第4张图片

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

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

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

你可能感兴趣的:(linux下SIGSTOP和SIGTSTP信号的副作用)