2013-10-02 46 views
0

我正在编写一个shell,现在它来控制子进程。 当我在子进程使用signal (SIGTERM, SIG_DFL);,通过按Ctrl + C产生关于子进程中的SIGINT

信号SIGINT,并且该信号终止整个操作系统壳。

我该如何终止例如“猫”的过程而不是整个壳? 我应该使用像出头:

void sig_handler(int sig) { 
if(sig ==SIGINT) 
{ 
kill(pid); 
} 
} 

真的感谢插槽。

+0

你试过了吗?结果是什么? – alk

+0

我想孩子的过程会变成僵尸。 –

回答

0

你的问题相当模糊。你能更清楚你想达到什么目的吗? 我想你应该使用signal(SIGTERM,sig_handler)而不是SIG_DFL,这是采取的默认操作。因为,你有一个信号处理程序,你可以调用它,而不是像SIG_INT或SIG_DFL这样的预定义函数。你的函数里面的代码看起来很好。只要你知道pid,你就可以杀死(pid)。

0

在exec'd孩子中,如果将SIGINT(和SIGQUIT)处理程序设置为父shell中的处理程序,则SIGINT(和SIGQUIT)处理程序将是SIG_DFL,而这很可能是正确的。 (当然,你不能在一个exec上继承一个非默认的信号处理程序,因为exec'd过程中通常不存在该函数。)

设置SIGTERM的处理程序不会影响对信号情报的反应,反之亦然。

你的外壳不应该需要传递信号给它的孩子。