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

时间:2011-06-28 04:24:00

标签: c fork kill

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

3 个答案:

答案 0 :(得分:27)

发送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

  

kill -9 pid

在C中,您可以使用kill syscall执行相同的操作:

kill(pid, SIGKILL);

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

答案 1 :(得分:7)

尝试这样的事情:

#include <signal.h>

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.
         */
    }
}

答案 2 :(得分:1)

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

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

请记住在子进程上调用wait()以防止任何延迟僵尸。