【发布时间】:2014-04-17 21:23:58
【问题描述】:
在我的父进程中,我创建了一个执行 system("find / -print") 的子进程。 从父级内部,当我尝试使用 kill(childProcPID, SIGTERM) 杀死这个子进程时,它不会立即终止。 system 命令继续在控制台上打印输出。
示例代码如下:
int main(void) {
pid_t childProc = fork();
switch (childProc) {
case -1:
perror("fork() error");
exit(EXIT_FAILURE);
case 0:
system("find / -print");
printf("if I use kill(pid, SIGTERM) control doesnt reach here");
exit(EXIT_SUCCESS);
default:
;
int i = 500000;
//No a great way to put sleep
//but its just temp
while (i != 0) {
--i;
}
kill(childProc, SIGTERM);
break;
}
printf("Exit!!!!!!");
return EXIT_SUCCESS;
}
请让我知道我做错了什么或者是杀死孩子的正确方法?
【问题讨论】:
-
SIGKILL可能是一个选项。 -
使用 SIGKILL,我得到相同的结果
-
有可能孩子甚至没有跑步。尝试使用
sleep(1)而不是你的忙循环。它在<unistd.h>。 -
实际上,当我运行这个程序时,我看到输出连续写在屏幕上。所以,我猜系统命令仍在运行。
-
我猜该程序已经完成,而您所看到的只是 I/O 子系统的输出缓冲区清空。尝试按 CTRL-O,看看是否设置为刷新。