2010-09-27 4 views
0

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

ответ

2

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

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

0

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

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

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

kill -SEGV 11 

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

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

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

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

Смежные вопросы