Fork如何使用PID终止进程

时间:2013-09-09 11:44:10

标签: c linux fork

大家好我必须使用c ++运行二进制文件并将其删除。

我的代码看起来像

static int PROCESS_PID=0;

void startService(bool startservice){

if(startservice==true){
 pid_t PID = fork();
 if(PID == 0) {
   PROCESS_PID = getpid();
   printf("the child's pid is: %d\n", PROCESS_PID);
   system("./process");
 }
}

else{
 kill(PROCESS_PID, SIGUSR1); //kill process inside child process
 }

}

但是当我杀死整个程序时,整个程序都会退出。 任何的想法 ?我的代码有什么问题吗?

...谢谢

2 个答案:

答案 0 :(得分:3)

当你致电system()时,你正在开始第三个过程 - 一个你没有pid的过程。请改用exec()

更糟糕的是,kill()来电仅在startservice!=true的情况下发出,在这种情况下PROCESS_PID==0 ...所以你要杀死进程0(这将发送发信号通知当前进程组中的所有进程。)

答案 1 :(得分:1)

它不起作用的原因是因为你加倍fork(),因为system()会执行fork() / exec()以执行你想要的命令运行

如果您想更好地控制子进程(包括杀死它),请编写您自己的system()版本,自己执行fork()exec()

有许多关于如何在互联网上敲门的例子。