2011-11-28 22 views
16

自分のプログラムを再起動しようとしていますが、何も動作していないようです。私はfork()を使ってみましたが、殺した後にparentプロセスchildも殺されます。プログラムを再起動する方法は? (Linuxプロセス)

CODE

void sigup_handler(int signum) { 
    int pid = fork(); 
    if (pid == 0) { 
     execve("prog2", NULL); 
    } 
    else 
     kill(getpid(), SIGTERM); 
} 

int main() { 
    puts("Program 2 started."); 
    signal(SIGHUP, sigup_handler); 
    sleep(50); 
    puts("Program 2 terminated."); 
    return 0; 
} 

答えて

13

あなただけkillparentするつもりなら、なぜforkでわざわざ?ちょうどexecをしてください。プログラムの新しいインスタンスは同じプロセスですが、効果的に再起動されます。

+0

続いdaemon(3)を使用することができます。プログラム2が始まりました。単純なexecve( "prog2"、NULL);これは私を混乱させる。 「プログラム2終了」を表示してはいけませんか? – bvk256

+0

親が既にkill(getpid()、...)で終了しているので、 "Program 2 terminated"を呼び出すことはありません。 –

+0

[OK]をクリックします。とにかく、このメッセージは、1つのプロセスが終了することが保証されている場所に配置することで簡単に達成できます。 – bvk256

3

2つのレベルのフォークを使用します。子供を守り、自分の状態を監視する親の "モニタ"アプリ。子供が死亡した場合、モニターは新しいものを起動します。子供たちはそれから、彼らがしなければならないことを何でもするために自分たちでフォークします。

しかし、アプリケーションの「新しい」コピーが殺されている状態と同じ状態になる必要がない場合は、新しく独立したコピーを開始するためにexec()を使用するほうがよいでしょう。あなたはそのモニターのコピーを周りに座らせる必要があります。

0

あなたはそれがプログラム2が起動出力execve(2)

関連する問題