我正在尝试让我的程序重新启动,但似乎什么都不起作用。我尝试使用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;
}
发布于 2011-11-29 05:11:23
如果您只是要kill
parent
,为什么还要费心使用parent
呢?只需执行exec
即可。程序的新实例仍将是相同的进程,但将有效地重新启动。
发布于 2011-11-29 05:12:31
使用2级分叉。一个家长的“监控”应用程序,分叉孩子并监控他们的状态。如果一个孩子死了,监视器会启动一个新的。然后,孩子们自己做叉子,做他们必须做的任何事情。
但是,如果你不需要应用程序的新副本与被终止的副本具有相同的状态,那么使用exec()启动一个新的独立副本可能是一个更好的选择,这样可以省去让监视器副本闲置的麻烦。
https://stackoverflow.com/questions/8302323
复制相似问题