我正在制作一个shell,当我发布需要在后台工作的进程时,以及在启动后按CTRL-C时遇到麻烦。
基本上一切正常,但是如果我在forked-execvp进程运行时按CTRL-C,即使我已经处理了信号,CTRL-C也会被提供给我的孩子。我理解传播的原因(如果我理解的话,信号发送给与终端相关的所有孩子)
问题就像我在上一个与我的问题相关的主题中看到的那样,当我们刚刚执行exec时,我们无法处理信号。
所以我要求社区,如果无论如何都要在我的孩子中处理这个ctrl-c(基本上什么都不做),因为我需要在我的父进程中询问确认,然后才能杀死每个后台进程。
希望很清楚,如果有任何误解,请不要犹豫,询问更多信息(抱歉英语不是我的母语)。感谢
答案 0 :(得分:0)
Ctrl+C
)生成的信号将发送到当前会话的前景组中的每个进程。
防止后台进程受到这些信号影响的最佳方法是将其与终端会话(以及前台组)分离。
为此,您需要在执行程序之前调用setsid(2)
。