所以我有这个父进程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 在收到一个(它反弹它)时向 A 发送一个 SIGQUIT,进程 B 具有:
signal(SIGQUIT,riparti);
void riparti(int a)
{
kill(pid_parent,SIGQUIT);
}
现在,当我在进程 B 的窗口上按一次 CTRL+\ 时,一切顺利。如果我第二次这样做,进程 A 似乎不再收到信号了。