[Volgograd] Wait for PID

Serge S. Fukanchik fuxx на solvo.ru
Пн Авг 25 10:47:47 MSD 2003


Ablamsky Taras писал мне ранее:
>> > On Sat, Aug 23, 2003 at 10:48:44PM +0400, Dwarf wrote:
>> > > Так... Мне нужно дождаться, когда процесс, имеющий заданный PID
>> > > завершится. Функция wait (равно, как и waitpid) может ожидать только
>> > > завершение дочернего процесса. А вообще, можно ожидать завершения
>> > > любого процесса (ну, хотя бы, выполняемых с текущим идентификатором
>> > > пользователя)?
>> > > 
>> > По моему нет.
>> > 
>> > А что это за процесс который нужно ждать?
>> > Когда завершается дочерний процесс он посылает родительскому
>> > сигнал SIGCHLD, тебе нужно чтобы процесс который ты ждешь послал
>> > тебе сигнал.
>> > 
>> > Посмотри exit(2), exit(3), ptrace(2) и тд
>> 
>> А если это не дочерний процесс??
>
>О том и речь, что тогда все иначе.
>
>> 
>> > Вообще это уже IPC, может то что тебе надо можно сделать другими
>> > средствами IPC.
>> 
>> Что такое IPC??
>
>Inter-Process Communications -- межпроцессное взаимодействие,
>сюда относятся: сигналы, fifo, pipe, очереди сообщений, семафоры,
>разделяемая память, сокеты.

Сложно советовать не зная проблемы, приходится давать общие советы.
1. Многие проги записывают свой pid в специальный файл когда запущены
и удаляют его перед завершением. В таком случае wait заменяется на access.
2. Если прога не создает такого файла - создай его сам. Оберни прогу в
скрипт, который будет создавать файл с pidом и удалять его и назови его так
же как и прогу и запихни раньше в PATH. Далее смотри случай 1. Только не забудь 
запихнуть в скрипт вызов trap например так:
trap "{ rm -f $LOCK ; exit; }" EXIT

Создание файла самый простой способ IPC ;). Если же ты  не хочешь раз в секунду
проверять наличие файла (вполне законно), а просто заблокировать свою прогу,
то используй unix sockets. Просто создай
такой сокет в скрипте, а для того чтобы заблокировать проверяющую прогу просто
попытайся прочитать из него. Когда завершится нужный процесс просто запиши в
этот сокет какую-нибудь ерунду и закрой его.

А по поводу других средств Тарас прав. Очень похоже на то что тебе нужно
хорошенько продумать чего ты хочешь. Обычно такие вопросы означают что что-то
делается не так.

-- 
Лучше вовремя настучать, чем потом перестукиваться



Подробная информация о списке рассылки Volgograd