2011-06-25 6 views
6

新しい親は常に "init"ですか、は新しい親になるかを制御する方法がありますプロセスの再育成:誰が新しい親であるかを制御する

ウィキペディアは、常に「init」と表示されているようです。私は本当にこれが当てはまらないことを願っています。私はsetpgidとsetsidで考えることができるすべてを試しましたが、運はありません。そして今、私はこのウィキペディアの記事を見て、私はアドバイスが必要です。

Unixライクなオペレーティングシステムでは、任意の 孤立プロセスは、特別なinitシステム プロセスによって採用直ちに あろう。この操作は と呼ばれ、自動的に行われます。 技術的には、プロセス は親として "init"プロセスを持っていますが、 元々 というプロセスが作成されていないため、孤児プロセス と呼ばれています。 Taken from wikipedia

私はワーカー・プロセスの数を実行するMacのアプリを作ってるので、私は求めている理由があります。私はこれらのワーカープロセスをtask managerのプロセス階層にメインプロセスの子として表示したいと思います。いくつかのワーカーは異なるユーザーとして実行され、Mac OS Xでは子プロセスに特権を渡すために2回フォークする必要があります。私は現在、デーモンとして動作しているワーカーを「二重フォーク」しているので、タスクマネージャで見ると、ワーカーが親プロセスとして「init」を持っていることがわかります。

答えて

11

孤児は常にinitによって採用されます。親を一部の非初期化プロセスに変更する方法はありません(Unix)。


これはもはや厳密には真実ではありません。これを行うための移植可能なUnixの方法はまだありませんが、Andy Lutomirski氏が指摘しているように、Linux 3.4ではprctlPR_SET_CHILD_SUBREAPERが追加されています。実際に

、subreaperは 子孫プロセスのinit(1)の役目を果たします。

9

Linuxでは、孤立した子孫がinitではなく親の子孫であることを示すために、PR_SET_CHILD_SUBREAPERを使用できます。