我正在写一个shell,现在它来控制子进程。
当我在子进程中使用signal (SIGTERM, SIG_DFL);
时,
信号SIGINT由Ctrl + C生成,该信号终止整个OS shell。
我怎么才能终止进程,例如“cat”,但不是整个shell? 我应该使用像:
这样的东西吗?void sig_handler(int sig) {
if(sig ==SIGINT)
{
kill(pid);
}
}
非常感谢插槽。
答案 0 :(得分:0)
你的问题很模糊。你能更明确地想要达到什么目标吗? 我认为你应该使用signal(SIGTERM,sig_handler)而不是SIG_DFL,这是默认的操作。因为,你有一个信号处理程序,你可以调用它而不是像SIG_INT或SIG_DFL这样的预定义函数。你的函数里面的代码看起来很好。只要你知道pid,就可以杀死(pid)。
答案 1 :(得分:0)
在exec'd子中,SIGINT(和SIGQUIT)处理程序将是SIG_DFL,如果它们被设置为父shell中的处理程序,那很可能是正确的。 (当然,您不能在exec中继承非默认信号处理程序,因为该函数通常甚至不存在于exec'd进程中。)
为SIGTERM设置处理程序不会影响对SIGINT的响应,反之亦然。
你的外壳不需要向其孩子传递信号。