Как узнать, собраны ли все процессы в группе процессов? ⇐ Linux
Как узнать, собраны ли все процессы в группе процессов?
Я изучаю сигналы и пишу простую программу-оболочку. Я столкнулся с проблемой: оболочке нужно дождаться завершения приоритетного задания, которое может состоять из нескольких процессов. Кажется, мне нужно использовать waitpid, чтобы «ждать» все процессы в группе процессов задания. Сначала у меня вышел следующий код:
pid_t pid; while ((pid = waitpid(-pgid, NULL, 0)) > 0) { // Поработай немного } если (ошибка == ECHILD) { // Теперь мы знаем, что все процессы в группе завершились } Но потом я начал подозревать: поскольку идентификатор процесса может быть повторно использован после его завершения, и я думаю, что то же самое можно сделать и с идентификатором группы процессов, есть вероятность, что после того, как последний процесс в группе будет wait обрабатывается циклом while, и перед началом следующего цикла создается новый процесс, идентификатор группы процессов которого также равен pgid. В этом случае цикл продолжит ожидать нового процесса, хотя на самом деле он не принадлежит к предыдущей группе. На самом деле, я думаю, что использование waitpid не может решить проблему. После последнего waitpid мне нужно использовать его еще раз, чтобы проверить, есть ли еще процессы с тем же pgid. Между этими двумя вызовами waitpid могут возникнуть новые процессы с тем же самым pgid.
Позже, заметив, что дочерний поджнец используется для работы с потомками и внуками, мне пришла в голову идея, что я могу использовать процесс A исключительно для работы на переднем плане, а процесс B - для работать со всеми остальными процессами, чтобы любые новые процессы (принадлежащие процессу B) не мешали waitpid процесса A. Я до сих пор не знаю, осуществим ли этот метод и возникнут ли дальнейшие проблемы.
Мои вопросы: 1) есть ли простой способ решить проблему? 2) или какой-то сложный метод? 3) или мое беспокойство по поводу проблемы излишне? 4) или проблемы на самом деле не будет?
Спасибо.
Я изучаю сигналы и пишу простую программу-оболочку. Я столкнулся с проблемой: оболочке нужно дождаться завершения приоритетного задания, которое может состоять из нескольких процессов. Кажется, мне нужно использовать waitpid, чтобы «ждать» все процессы в группе процессов задания. Сначала у меня вышел следующий код:
pid_t pid; while ((pid = waitpid(-pgid, NULL, 0)) > 0) { // Поработай немного } если (ошибка == ECHILD) { // Теперь мы знаем, что все процессы в группе завершились } Но потом я начал подозревать: поскольку идентификатор процесса может быть повторно использован после его завершения, и я думаю, что то же самое можно сделать и с идентификатором группы процессов, есть вероятность, что после того, как последний процесс в группе будет wait обрабатывается циклом while, и перед началом следующего цикла создается новый процесс, идентификатор группы процессов которого также равен pgid. В этом случае цикл продолжит ожидать нового процесса, хотя на самом деле он не принадлежит к предыдущей группе. На самом деле, я думаю, что использование waitpid не может решить проблему. После последнего waitpid мне нужно использовать его еще раз, чтобы проверить, есть ли еще процессы с тем же pgid. Между этими двумя вызовами waitpid могут возникнуть новые процессы с тем же самым pgid.
Позже, заметив, что дочерний поджнец используется для работы с потомками и внуками, мне пришла в голову идея, что я могу использовать процесс A исключительно для работы на переднем плане, а процесс B - для работать со всеми остальными процессами, чтобы любые новые процессы (принадлежащие процессу B) не мешали waitpid процесса A. Я до сих пор не знаю, осуществим ли этот метод и возникнут ли дальнейшие проблемы.
Мои вопросы: 1) есть ли простой способ решить проблему? 2) или какой-то сложный метод? 3) или мое беспокойство по поводу проблемы излишне? 4) или проблемы на самом деле не будет?
Спасибо.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему подключение очереди PHP-FPM, когда Max Active процессы меньше, чем общие процессы
Anonymous » » в форуме Php - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Синхронизация процессов для разных процессов, не работающих с двумя семафорами [дубликат]
Anonymous » » в форуме C++ - 0 Ответы
- 43 Просмотры
-
Последнее сообщение Anonymous
-