Как написать диспетчер задач под Unix?
От: Areg Россия  
Дата: 11.03.04 12:56
Оценка: :)
Привет всем,

нужно написать маленькую программу которая бы асинхронно запускала некоторое количество программ, следила бы за их окончанием и производила некоторые действия. Как наиболее эффективно это сделать? Через обработчик SIGCHLD?

Заранее спасибо.
Re: Как написать диспетчер задач под Unix?
От: m.a.g. Мальта http://dottedmag.net/
Дата: 11.03.04 14:14
Оценка: +1
Здравствуйте, Areg, Вы писали:

A>нужно написать маленькую программу которая бы асинхронно запускала некоторое количество программ, следила бы за их окончанием и производила некоторые действия. Как наиболее эффективно это сделать? Через обработчик SIGCHLD?


Ага.
... << RSDN@Home 1.1.3 beta 2 >>
Re[2]: Как написать диспетчер задач под Unix?
От: Areg Россия  
Дата: 12.03.04 10:52
Оценка:
Здравствуйте, m.a.g., Вы писали:

MAG>Ага.


Вопрос возникает.
В обработчике SIGCHLD (SIGCLD) можно ли использовать мьютексы? Я хочу в обработчике стереть задачу из списка активных задач — сначала делаю lock, стираю задачу, потом unlock. Может ли в такой схеме сигнал пропасть?

Заранее спасибо.
Re[3]: Как написать диспетчер задач под Unix?
От: m.a.g. Мальта http://dottedmag.net/
Дата: 12.03.04 14:14
Оценка:
Здравствуйте, Areg, Вы писали:

A>Здравствуйте, m.a.g., Вы писали:


MAG>>Ага.


A>Вопрос возникает.

A>В обработчике SIGCHLD (SIGCLD) можно ли использовать мьютексы? Я хочу в обработчике стереть задачу из списка активных задач — сначала делаю lock, стираю задачу, потом unlock. Может ли в такой схеме сигнал пропасть?

Мутексы сигналам перпендикулярны. Чтобы сигнал не пропадал, играйся с sigaction и иже с ним по поводу reliable signals.
... << RSDN@Home 1.1.3 beta 2 >>
Re[3]: Как написать диспетчер задач под Unix?
От: Аноним  
Дата: 15.03.04 11:38
Оценка:
Здравствуйте, Areg, Вы писали:

A>Здравствуйте, m.a.g., Вы писали:


MAG>>Ага.


A>Вопрос возникает.

A>В обработчике SIGCHLD (SIGCLD) можно ли использовать мьютексы? Я хочу в обработчике стереть задачу из списка активных задач — сначала делаю lock, стираю задачу, потом unlock. Может ли в такой схеме сигнал пропасть?

А что, программа многопоточная?
А вообще, в обработчике сигнала слишком много делать нежелательно (просто трудно реализовывать, т.к. много чего нельзя) — сигналы в UNIX асинхронные.
Например, сигнал может случиться, когда твоя программа вызвала malloc, поэтому из обработчика сигнала нельзя вызывать malloc А поэтому, нельзя вызывать printf Т.е. очень много чего нельзя.
Думаю, не стоит в обработчике сигнала пытаться лочить mutex — возможно придётся долго ждать.
Обычно в обработчике поднимают какой-нибудь флажок, что надо что-то обработать, а обрабатывают уже потом, после завершения обработчика.

Не бойся пропустить SIGCHLD — у тебя есть список дочерних процессов и можно лишний раз сделать wait() или waitpid() и они тебе расскажут, кто завершился, пока ты был занят и мог пропустить SIGCHLD.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.