Появление вызова Python, который вызывает сценарий с использованием многопроцессорной обработки (проблема pgrp)? - PullRequest
1 голос
/ 15 марта 2012

Я пишу среду тестирования юнитов для серверов, которая использует popen, чтобы в основном выполнить «python myserver.py» с shell = False, выполнить несколько тестов, а затем приступить к отключению сервера с помощью killpg.

Этот myserver.py может и будет использовать многопроцессорность для запуска собственных подпроцессов.Проблема в том, что из моих тестов кажется, что pid pgrp процессов сервера разделяет тот же pid группы, что и реальный основной поток, выполняющий тесты модулей, поэтому выполнение os.killpg для pid группы не только отключит сервер, но итакже процесс, вызывающий popen (не то, что я хочу сделать).Почему он это делает?И как я могу сделать так, чтобы они были на отдельных групповых пидах, которые я могу убить независимо?

1 Ответ

1 голос
/ 05 апреля 2012

Вы спрашиваете о чем-то довольно грязном здесь. Я подозреваю, что ничего из этого вы не хотите делать вообще, и что вы действительно хотите сделать это каким-то более простым способом. Однако, если вы действительно хотите связываться с группами процессов ...

Обычно новая группа процессов создается только системным вызовом setpgrp (2). В противном случае процессы, созданные fork (2), всегда являются членами текущей группы процессов. Тем не менее, при создании новой группы процессов процессы в этой группе даже не контролируются каким-либо tty, и выполнение того, что вы, кажется, хотите делать правильно, требует понимания всей модели группы процессов. Хорошим примером того, как все это работает, является Стивенс, «Расширенное программирование в среде Unix», в котором подробно рассказывается о нем.

Если вы действительно хотите пойти по этому пути, вам придется внедрить popen или аналогичный файл со всеми соответствующими системными вызовами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...