在子进程中停止信号传播使exec

时间:2017-12-17 16:54:47

标签: c linux operating-system multiprocessing

我正在制作一个shell,当我发布需要在后台工作的进程时,以及在启动后按CTRL-C时遇到麻烦。

基本上一切正常,但是如果我在forked-execvp进程运行时按CTRL-C,即使我已经处理了信号,CTRL-C也会被提供给我的孩子。我理解传播的原因(如果我理解的话,信号发送给与终端相关的所有孩子)

问题就像我在上一个与我的问题相关的主题中看到的那样,当我们刚刚执行exec时,我们无法处理信号。

所以我要求社区,如果无论如何都要在我的孩子中处理这个ctrl-c(基本上什么都不做),因为我需要在我的父进程中询问确认,然后才能杀死每个后台进程。

希望很清楚,如果有任何误解,请不要犹豫,询问更多信息(抱歉英语不是我的母语)。感谢

1 个答案:

答案 0 :(得分:0)

由键盘中断(如Ctrl+C)生成的

信号将发送到当前会话前景组中的每个进程。 防止后台进程受到这些信号影响的最佳方法是将其与终端会话(以及前台组)分离。 为此,您需要在执行程序之前调用setsid(2)