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

bvk*_*256 17 c linux operating-system process

我正试图让我的程序重新启动,但似乎没有任何工作.我尝试过使用fork(),但在杀死这个 parent过程后,它也 child被杀死了.

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;
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*olf 13

为什么与麻烦fork,如果你只是去kill parent?做吧exec.该程序的新实例仍将是相同的过程,但将有效地重新启动.

  • 请注意,旧过程映像的文件描述符将保持打开状态! (4认同)

Mar*_*c B 5

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

但是,如果您不需要应用程序的“新”副本与被杀死的应用程序具有相同的状态,那么使用 exec() 来启动一个新的独立副本可能是一个更好的选择,这样您就不必拥有那个显示器副本坐在周围。