C unix:向kill进程发送一个信号与keybord不同。为什么?

时间:2013-09-05 00:50:47

标签: unix signals handler kill

所以我有这个父进程A分叉并创建一些进程,B和C.C本身会创建更多,但我认为不重要。

一把叉子:

char *argv_exec[] = {
    "/usr/bin/xfce4-terminal",
    "--geometry",
    "160x48",
    "-x",
    "./tv",
    NULL };

pid_tv = fork();

if (pid_tv == 0)
{   
    (void) execv(argv_exec[0], argv_exec);
    fprintf (stderr, "Errore nella execv.\n%s\n",
    strerror(errno) );
    anelito(0);
} 

虽然它们都在一起运行,但我希望能够从进程B向其父进程A发送一个信号,让他做一些事情 - 在这种情况下杀死所有的孩子并重新分叉。

进程A将其pid发送到消息中的进程B.

父A处理信号:

if(signal(SIGQUIT,riparti)==SIG_ERR)
    ...
    void riparti(int s)
    { 
               kill_all_children();
               fork_all_children_again();
    }

进程B在收到一个SIGQUIT时向它发送一个SIGQUIT(它反弹) 流程B有:

signal(SIGQUIT,riparti);

void riparti(int a)
    {
          kill(pid_parent,SIGQUIT);
    }

现在,当我在进程B的窗口上按CTRL + \一次,一切顺利。 如果我第二次这样做,过程A似乎不再接收信号。

1 个答案:

答案 0 :(得分:1)

我认为你是从fork代码之外删除了父进程,你实际上是从进程 A 发送了那个信号,这反过来会杀掉父终端。