0
我正在執行一個文件作爲守護進程。我怎樣才能停止守護進程?如何停止守護進程
int main(int argc, char **argv)
{
if (argc != 5)
{
printf ("Usage: %s <server> <nick> <channel> <logging>\n", argv[0]);
return 1;
}
char *startPath = malloc(sizeof(char) *100);
strcpy(startPath,"/home/.../start");
int child_pnr;
if(daemonisieren() != 0)
{
printf("damonization not possible");
exit(0);
}
printf("I am a damon \n");
if((child_pnr = fork())==0)
{
execve(startPath,argv);
}
else if (child_pnr > 0)
{
printf("I am parent and have a child \n");
wait(child_pnr);
}
printf("gone....\n");
free(startPath);
}
我相信我可以殺死它,就像殺(childnr),但父進程等待子執行完成,他可能永遠不會做我必須有它知道childnr並殺死它的程序。我怎樣才能做到這一點?
謝謝...第二種方法很好,但程序可能會運行幾個小時...不知道多久...第一個是好的,但如果我想讀/ var/run我需要具有我的應用程序可能沒有的根... – Fendrix
如果你可以在那裏寫入,那麼位置/ var/run是方便的(而且是合適的),但是沒有關於位置的任何魔術......你有寫入權限的任何地方應該沒事。至於看門狗並且運行幾個小時,一個線程(用於初始細節的'man pthread_create')將非常輕量級。 – mah
@Fendrix,當你想要殺死子進程時你有什麼標準?如果你發送一個信號給你的父進程,等待會返回,並出錯並將errno設置爲EINTR。所以你可以使用這個事實,如果父進程收到一個信號,kill()子進程。 – nos