[Comm] Ctrl+C и SIGINT
LVU
=?iso-8859-1?q?lvu_=CE=C1_smap=2Egov=2Eua?=
Пт Ноя 10 12:34:32 MSK 2006
Здравствуйте!
Eugene Prokopiev wrote:
>> Убивать надо не 14306, а 14307, именно ему посылается сигнал
>> по Ctrl+C. Если же хочется, чтобы можно было убивать по
>> pid'у родителя, то в родителе должен быть обработчик соотв.
>> сигнала, который рассылает этот сигнал всем процессам группы
>> (-pid).
>
> А что такое "процессы группы"? Можно как-то рассылать сигнал всем
> дочерним процессам?
Каждый процесс имеет, кроме pid (идентификатор процесса) еще
и pgid (идентификатор группы процессов). После запуска
каждые процесс имеет своим pgid'ом pid процесса, его
породившего. Всем дочерним процессам (но и самому себе
тоже!) можно послать сигнал, узнав свой pid и послав сигнал
на -pid. Свой pid в шелле = это вроде $$.
> Я думал, что можно только узнать идентификатор порожденного процесса
> (как сделать это в sh?), сохранить, затем ждать сигнал, перехватить его
> и послать сохраненному идентификатору ...
Да, так тоже можно, если порожденный процесс 1. Если их
много - тоже можно :) но сложнее. pid последнего запущенного
- $!, только запускать его надо с &, чтобы не
останавливался поток выполнения скрипта на время работы
процесса. И потом ждать завершения (ловить SIGCHLD,
например). Обработчик сигнала в шелле задается командой trap.
With best regards, LVU.
Подробная информация о списке рассылки community