Убить процесс, когда родительский процесс заканчивается с помощью Control + C - PullRequest
3 голосов
/ 31 октября 2011

У меня есть программа с двумя процессами. Один из них может завершиться или выйти из-за исключения. Пока я тестирую программу, я заканчиваю ее, используя Control + c, но дочерний процесс все еще выполняется.

Есть ли возможность убить процесс, когда я нажимаю control + c или когда родительский процесс завершается.

Ответы [ 3 ]

6 голосов
/ 31 октября 2011

Нет возможности автоматизировать это, однако вы можете написать свои приложения для его поддержки. Предварительным условием является то, что процесс, который хочет, чтобы другой завершил работу, должен иметь свой идентификатор процесса; это значение, которое родитель получает от вызова fork().

Дайте каждому процессу обработчик сигнала для SIGINT - когда нажата кнопка control-C, SIGINT отправляется процессу. В этом обработчике сигналов отправьте сигнал другому процессу, а затем exit().

1 голос
/ 31 октября 2011

Вы можете запустить прослушиватель дочернего процесса, который периодически проверяет, выполняется ли родительский процесс.

0 голосов
/ 31 октября 2011

Вы можете найти все необходимые ответы здесь .
Например, вы можете перехватить CTRL + C и запустить подфункциюсигнал SIGINT , определяющий способ выхода или kill работающих PID.

Нефункциональный пример для иллюстрации принципа

SIGINT=2
trap 'clean_exit' $SIGINT
# other thgs in your main prog
function clean_exit(){
   # define SIGTERM and your $pid according to your need
   kill -$SIGTERM $pid
   #other things to  do
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...