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);
}

我想我可以像 kill(childnr) 一样杀死它,但是当父进程等待子进程完成执行时,他可能永远不会这样做,我必须有一个知道 childnr 并杀死它的程序。我怎样才能做到这一点?

4

1 回答 1

1

您可以使用许多不同的方法使孩子的进程号可用,所有这些方法都可以有效。一种简单的方法是将其存储到系统上的文件中。如果您查看,/var/run您可能会发现许多 XXX.pid 文件已经这样做了。

不过,对于您的用例,也许一个更好的解决方案是在您的父级中启动一个新线程(或让它派生第二个孩子),该线程执行一段时间的睡眠,如果该时间过去,它会杀死主要孩子。如果主子进程自行终止,满足父进程的等待,父进程可以杀死“看门狗”子进程(或线程)。

于 2012-09-20T17:20:40.370 回答