[英]How to make a program to restart itself? (Linux 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;
}
為什么與麻煩fork
,如果你只是要kill
的 parent
? 做exec
。 該程序的新實例仍將是相同的過程,但將有效地重新啟動。
使用2級分叉。 一個父“監視器”應用程序,它可以分離孩子並監控他們的狀態。 如果孩子死了,監視器會啟動一個新的。 然后孩子們自己做分叉,做他們必須做的事情。
但是,如果您不需要應用程序的“新”副本與被殺死的副本具有相同的狀態,那么使用exec()啟動新的獨立副本可能是更好的選擇,從而節省您必須擁有的坐在那里的監視器副本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.