大家好我必须使用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
}
}
但是当我杀死整个程序时,整个程序都会退出。 任何的想法 ?我的代码有什么问题吗?
...谢谢
答案 0 :(得分:3)
当你致电system()
时,你正在开始第三个过程 - 一个你没有pid的过程。请改用exec()
。
更糟糕的是,kill()
来电仅在startservice!=true
的情况下发出,在这种情况下PROCESS_PID==0
...所以你要杀死进程0(这将发送发信号通知当前进程组中的所有进程。)
答案 1 :(得分:1)
它不起作用的原因是因为你加倍fork()
,因为system()
会执行fork()
/ exec()
以执行你想要的命令运行
如果您想更好地控制子进程(包括杀死它),请编写您自己的system()
版本,自己执行fork()
和exec()
。
有许多关于如何在互联网上敲门的例子。