1

大家好,我必须使用 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
 }

}

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

谢谢....

4

2 回答 2

3

当你打电话时,system()你正在启动第三个进程——一个你没有 pid 的进程。改为使用exec()

更糟糕的是,您的kill()调用仅在startservice!=true, 并且在这种情况下PROCESS_PID==0......所以您正在杀死进程 0 (这会将信号发送到当前进程组中的所有进程)。

于 2013-09-09T11:47:37.297 回答
1

它不工作的原因是因为你正在加倍fork(),因为system()将执行fork()/exec()以执行你想要运行的命令。

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

网上有很多关于如何做到这一点的例子。

于 2013-09-09T11:47:13.120 回答