2015-04-15 3 views
1

Я кодирую оболочку в C, которая должна поддерживать процессы фона и переднего плана.Обработчик сигналов и ожидание сосуществуют

Ограничения:

  • Фоновые процессы, которые оканчиваются должны быть перехвачено обработчиком сигнала
  • Никаких глобальных переменных не могут быть использованы для не передачи от обработчика сигнала
  • Нет списка процессов/ИДП позволило

Мое решение:

  • Waitpid пока процесс переднего плана не заканчивается
  • Для фоновых процессов, немедленно вернуться подсказывать
  • Handler ловит SIGCHLD где waitpid используется для таблицы ясно процесса

Проблема:

  • Foreground процессы также аккуратный обработчик, вызывающий ошибку одного из двух waitpids
  • Не удается решить, игнорируя SIGCHLD во время работы переднего плана, поскольку фоновый процесс т завершить в течение этого времени
  • Не можете найти способ сделать обработчик игнорировать ФИД (на переднем плане процесс начался)

Спасибо!

ответ

0

Проблема:

  • Foreground процессы также аккуратный обработчик вызывает один из двух waitpids в ошибки

Это не проблема - просто оставить обработчик тогда.

void handler(int signum) 
{ 
    pid_t pid; 
    while (pid = waitpid(-1, NULL, WNOHANG), pid > 0) 
     fprintf(stderr, "%d terminated\n", pid); 
} 
Смежные вопросы