如何控制SIGTSTP信号到子进程?

时间:2009-10-04 02:40:55

标签: unix process

我正在写一个shell。它分叉背景和前景进程。我的SIGTSTP信号有问题。因此,在给出Ctrl ^ Z之后,生成SIGTSTP,因为此信号被传递到我的shell及其子进程(我的shell已经分叉的所有后台进程和前台进程)。但就像在实际的shell中一样,SIGTSTP只传递给前台进程,而不是后台进程。那么如何控制这种行为意味着阻止信号被发送到我的shell的后台进程?

我也尝试了setpgid(),这意味着要更改后台进程的pgid。但是一旦进程执行了exec,setpgid()就会返回错误。

1 个答案:

答案 0 :(得分:1)

如果您为SIGTSTP安装自己的处理程序,则可以控制其传播给您的孩子(或不是)。由于您正在编写shell,因此您可能希望使用其他一些信号(至少SIGINT)执行此操作。

孩子在setpgid编辑后不能exec?很容易,在孩子setpgid之前致电exec。您之后不需要更改它 - 每个作业都应该有一个唯一的pgid,您应该设置终端的控制组以匹配预期的活动作业pgid