Как убить дочерний процесс родительским процессом?

Я создаю дочерний процесс, используя fork() . Как родительский процесс может убить дочерний процесс, если дочерний процесс не может завершить его выполнение в течение 30 секунд? Я хочу разрешить дочернему процессу выполнять до 30 секунд. Если это займет более 30 секунд, родительский процесс убьет его. У вас есть идея сделать это?

Отправьте ему SIGTERM или SIGKILL:

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

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

SIGTERM вежлив и позволяет очистить процесс до его начала, тогда как SIGKILL – это, когда он не будет слушать> 🙂

Пример из оболочки (справочная страница: http://unixhelp.ed.ac.uk/CGI/man-cgi?kill )

kill -9 pid

В C вы можете сделать то же самое, используя системный вызов kill:

 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 () – это идентификатор процесса дочернего процесса. Вещь, которая стоит где-то, когда вам нужно прекратить дочерний процесс. fork () возвращает ноль (0) в дочернем процессе.

Когда вам нужно завершить дочерний процесс, используйте функцию kill (2) с идентификатором процесса, возвращаемым fork (), и сигналом, который вы хотите отправить (например, SIGTERM).

Не забудьте вызвать wait () для дочернего процесса, чтобы предотвратить любые затяжные зомби.