我有以下代码创建子fork。我想在孩子完成执行之前杀死孩子。怎么做?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int i;
main (int ac, char **av)
{
int pid;
i = 1;
if ((pid = fork()) == 0) {
/* child */
while (1) {
printf ("I m child\n");
sleep (1);
}
}
else {
/* Error */
perror ("fork");
exit (1);
}
sleep (10)
// TODO here: how to add code to kill child??
}
答案 0 :(得分:10)
请参阅kill系统调用。在使用SIGKILL之前,通常首先使用SIGTERM为过程提供一个感恩的机会。
修改强>
忘了你需要使用waitpid来获取该进程的返回状态并阻止僵尸进程。
进一步编辑
您可以使用以下代码:
kill(pid, SIGTERM);
bool died = false;
for (int loop; !died && loop < 5 /*For example */; ++loop)
{
int status;
pid_t id;
sleep(1);
if (waitpid(pid, &status, WNOHANG) == pid) died = true;
}
if (!died) kill(pid, SIGKILL);
它将使该过程优雅地死亡5秒
答案 1 :(得分:9)
发送信号。
#include <sys/types.h>
#include <signal.h>
kill(pid, SIGKILL);
/* or */
kill(pid, SIGTERM);
如果你自己处理信号,第二种形式更可取。
答案 2 :(得分:4)
从父母那里发出kill(pid, SIGKILL)
。