How to kill a child process by the parent process?

前端 未结 3 1917
野的像风
野的像风 2020-12-08 04:32

I create a child process using a fork(). How can the parent process kill the child process if the child process cannot complete its execution within 30 seconds?

相关标签:
3条回答
  • 2020-12-08 05:09

    Send a SIGTERM or a SIGKILL to it:

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

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

    SIGTERM is polite and lets the process clean up before it goes, whereas, SIGKILL is for when it won't listen >:)

    Example from the shell (man page: http://unixhelp.ed.ac.uk/CGI/man-cgi?kill )

    kill -9 pid

    In C, you can do the same thing using the kill syscall:

    kill(pid, SIGKILL);
    

    See the following man page: http://linux.die.net/man/2/kill

    0 讨论(0)
  • 2020-12-08 05:15

    In the parent process, fork()'s return value is the process ID of the child process. Stuff that value away somewhere for when you need to terminate the child process. fork() returns zero(0) in the child process.

    When you need to terminate the child process, use the kill(2) function with the process ID returned by fork(), and the signal you wish to deliver (e.g. SIGTERM).

    Remember to call wait() on the child process to prevent any lingering zombies.

    0 讨论(0)
  • 2020-12-08 05:26

    Try something like this:

    #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.
             */
        }
    }
    
    0 讨论(0)
提交回复
热议问题