процесс переучивания - PullRequest
7 голосов
/ 25 июня 2011

Всегда ли новый родитель "init" или есть ли способ контролировать, кто станет новым родителем ?

Википедия, кажется, указывает, что это всегда "init". Я действительно надеюсь, что это не так. Я перепробовал все, что мог придумать с setpgid и setsid, но не повезло. И теперь, когда я вижу эту статью в Википедии, мне нужен совет.

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

Причина, по которой я спрашиваю, заключается в том, что я делаю приложение для Mac, которое запускает несколько рабочих процессов. Я хочу, чтобы эти рабочие процессы отображались как дочерние элементы основного процесса в иерархии процессов диспетчера задач . Некоторые работники работают от имени разных пользователей, и в Mac OS X мне нужно дважды выполнить разветвление, чтобы передать привилегии дочернему процессу. Поскольку я «делаю двойную вилку», работники в настоящее время работают как демоны, и когда я смотрю с помощью диспетчера задач, я вижу, что работники имеют «init» в качестве родительского процесса.

Ответы [ 2 ]

11 голосов
/ 25 июня 2011

Дети-сироты всегда усыновляются init.Нет Unix способа изменить родительский процесс на какой-то неинициализированный процесс.


Начиная с Linux 3.4, это уже не совсем верно.По-прежнему нет портативного Unix-способа сделать это, но, как указывает Энди Лутомирски, Linux 3.4 добавляет PR_SET_CHILD_SUBREAPER для prctl.

По сути, подзадачник выполняет рольinit(1) для его дочерних процессов.

9 голосов
/ 07 августа 2013

В Linux вы можете использовать PR_SET_CHILD_SUBREAPER, чтобы указать, что ваши потомки-сироты должны быть пере-рождены для вас, а не для инициализации.

...