#c #timer #fork #exec
Вопрос:
Мне просто было интересно, знает ли кто-нибудь, как отслеживать время, в течение которого дочерний процесс выполняется в C? Я запускаю сразу много дочерних процессов с помощью fork (), но если они не завершатся через определенный промежуток времени, я хочу отправить им сигнал SIGABRT. Например, если у меня есть дочерний процесс, который выполняет следующее, поэтому он спит в течение 10 секунд.
if (!fork()) {
execlp("sleep", "sleep", "10", NULL);
}
Если бы я хотел отправить SIGBRT на это, скажем, через 5 секунд, как бы я мог это сделать? У меня есть несколько процессов для управления, поэтому я не уверен, как отслеживать, как долго выполняется каждый процесс.
Комментарии:
1. Существует множество способов структурирования кода, поэтому трудно предложить общее решение. Основным подходом было бы ведение списка дочерних процессов, включающего время прерывания для каждого процесса. Сохраняйте список отсортированным к следующему времени прерывания. Затем в процессе мониторинга создайте
signalfd
, чтобы перехватыватьSIGCHLD
сигналы, указывающие на завершение дочернего процесса иpoll
те, у которых есть время ожидания. Тайм-аут будет установлен в зависимости от следующего времени прерывания.