如何让程序重启? (Linux进程)

时间:2011-11-28 21:07:51

标签: c linux process operating-system

我试图让我的程序重新启动,但似乎没有任何效果。我尝试使用fork(),但在杀死 parent进程后, child也被杀死了。

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;
}

3 个答案:

答案 0 :(得分:12)

如果您只是去fork kill,为什么还要使用parent?只需做exec即可。该程序的新实例仍然是相同的过程,但将有效地重新启动。

答案 1 :(得分:4)

使用2级分叉。一个父“监视器”应用程序,它可以分离孩子并监控他们的状态。如果孩子死了,监视器会启动一个新的。然后孩子们自己动手去做他们必须做的事情。

但是,如果您不需要应用程序的“新”副本与被杀死的副本具有相同的状态,那么使用exec()启动新的独立副本可能是更好的选择,必须坐在那里的监视器副本。

答案 2 :(得分:0)

您可以使用daemon(3)后跟execve(2)