gpt4 book ai didi

c - 如何停止守护进程

转载 作者:太空宇宙 更新时间:2023-11-04 11:29:01 25 4
gpt4 key购买 nike

我正在将文件作为守护进程执行。我怎样才能停止守护进程?

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) 一样杀死它,但是当父进程等待 child 完成执行时,他可能永远不会这样做,我必须有一个知道 childnr 并杀死它的程序。我该怎么做?

最佳答案

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

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

关于c - 如何停止守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12517482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com