だから私はいくつかのプロセスBとCをフォークして作成するこの親プロセスAを持っています。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 を受け取ると (それをバウンスします)、プロセス B は次の SIGQUIT を A に送信します。
signal(SIGQUIT,riparti);
void riparti(int a)
{
kill(pid_parent,SIGQUIT);
}
これで、プロセス B のウィンドウで CTRL+\ を 1 回押すと、すべてうまくいきます。もう一度実行すると、プロセス A はもうシグナルを受信していないようです。