Отправьте сигнал дочернему процессу через определенный промежуток времени

#c #timer #fork #exec

Вопрос:

Мне просто было интересно, знает ли кто-нибудь, как отслеживать время, в течение которого дочерний процесс выполняется в C? Я запускаю сразу много дочерних процессов с помощью fork (), но если они не завершатся через определенный промежуток времени, я хочу отправить им сигнал SIGABRT. Например, если у меня есть дочерний процесс, который выполняет следующее, поэтому он спит в течение 10 секунд.

 if (!fork()) {
    execlp("sleep", "sleep", "10", NULL);
}
 

Если бы я хотел отправить SIGBRT на это, скажем, через 5 секунд, как бы я мог это сделать? У меня есть несколько процессов для управления, поэтому я не уверен, как отслеживать, как долго выполняется каждый процесс.

Комментарии:

1. Существует множество способов структурирования кода, поэтому трудно предложить общее решение. Основным подходом было бы ведение списка дочерних процессов, включающего время прерывания для каждого процесса. Сохраняйте список отсортированным к следующему времени прерывания. Затем в процессе мониторинга создайте signalfd , чтобы перехватывать SIGCHLD сигналы, указывающие на завершение дочернего процесса и poll те, у которых есть время ожидания. Тайм-аут будет установлен в зависимости от следующего времени прерывания.