[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