如何通过父进程终止子进程?

我使用fork()创建一个子进程。 如果子进程无法在30秒内完成执行,父进程如何杀死子进程? 我想允许子进程执行长达30秒。 如果超过30秒,父进程将终止它。 你有任何想法吗?

发送SIGTERM或SIGKILL:

http://en.wikipedia.org/wiki/SIGKILL

http://en.wikipedia.org/wiki/SIGTERM

SIGTERM是礼貌的,让它在进程之前进行清理,而SIGKILL用于什么时候它不会监听> 🙂

shell中的示例(手册页: http : //unixhelp.ed.ac.uk/CGI/man-cgi?kill )

杀了-9 pid

在C中,你可以使用kill syscall做同样的事情:

 kill(pid, SIGKILL); 

请参见以下手册页: http : //linux.die.net/man/2/kill

尝试这样的事情:

 #include  pid_t child_pid = -1 ; //Global void kill_child(int sig) { kill(child_pid,SIGKILL); } int main(int argc, char *argv[]) { signal(SIGALRM,(void (*)(int))kill_child); child_pid = fork(); if (child_pid > 0) { /*PARENT*/ alarm(30); /* * Do parent's tasks here. */ wait(NULL); } else if (child_pid == 0){ /*CHILD*/ /* * Do child's tasks here. */ } } 

在父进程中,fork()的返回值是子进程的进程ID。 当您需要终止子进程时,将该值放在某处。 fork()在子进程中返回零(0)。

当您需要终止子进程时,使用kill(2)函数和fork()返回的进程ID,以及您希望传递的信号(例如SIGTERM)。

记得在子进程上调用wait()以防止任何挥之不去的僵尸。