подтверждение сигнала - PullRequest
       1

подтверждение сигнала

0 голосов
/ 27 сентября 2010

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

Ответы [ 2 ]

2 голосов
/ 27 сентября 2010

Родительский процесс обычно получает сигнал всякий раз, когда ребенок умирает независимо.Это сигнал SIGCHLD.

Этот сигнал может быть заблокирован родительским процессом, но в противном случае он всегда доставляется, когда ребенок выходит по какой-либо причине.Родитель может сказать, почему ребенок вышел, используя один из семейств wait (он же wait, wait3, wait4 или waitpid) для получения кода возврата.

0 голосов
/ 27 сентября 2010

Может быть непросто заставить фокус на дочернем процессе, чтобы он получал события клавиатуры.

Вы всегда можете использовать команду kill для отправки сигнала данному процессу. Не позволяйте имени kill вводить вас в заблуждение, вы можете отправить любой сигнал с помощью kill, kill -SIGNUM pid, но по умолчанию используется SIGTERM, что обычно приводит к завершению процесса.

Итак, если вы хотите отправить сигнал SEGV на процесс 11, вы бы сделали

kill -SEGV 11

Вы можете настроить родителя на перехват сигнала, повторно отправить его ребенку с помощью вызова kill (2), а затем дождаться выхода ребенка с помощью waitpid.

Обработчик сигнала родителя хотел бы что-то вроде этого:

int status;
kill(child_pid, SIG_TO_SEND);/*send to child*/
waitpid(child_pid, &status);/* wait for child to give up */

Если вы серьезно относились к сохранению родительского статуса и знали, что сигнал предназначен только для ребенка, вы, вероятно, установите переменную в родительском элементе, выйдете из обработчика сигнала, а затем выполните работу по отправке и ожиданию ребенок. В общем, хорошо как можно быстрее выходить из обработчиков сигналов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...