0

だから私はいくつかのプロセス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 はもうシグナルを受信して​​いないようです。

4

1 に答える 1