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.该程序的新实例仍将是相同的过程,但将有效地重新启动.
使用 2 级分叉。一个家长“监控”应用程序,它分叉孩子并监控他们的状态。如果一个孩子死了,监视器会启动一个新的。然后孩子们自己做分叉来做他们必须做的任何事情。
但是,如果您不需要应用程序的“新”副本与被杀死的应用程序具有相同的状态,那么使用 exec() 来启动一个新的独立副本可能是一个更好的选择,这样您就不必拥有那个显示器副本坐在周围。
| 归档时间: |
|
| 查看次数: |
8425 次 |
| 最近记录: |