簡體   English   中英

如何讓程序重啟? (Linux進程)

[英]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()啟動新的獨立副本可能是更好的選擇,從而節省您必須擁有的坐在那里的監視器副本。

您可以使用守護進程(3),然后使用execve(2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM