8

新しい親は常に「init」ですか、それとも新しい親になる人を制御する方法はありますか?

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

Unix ライクなオペレーティング システムでは、孤立したプロセスは、特別な init システム プロセスによってすぐに採用されます。この操作は親の再設定と呼ばれ、自動的に行われます。技術的には、プロセスの親として「init」プロセスがありますが、最初にそれを作成したプロセスが存在しないため、孤立プロセスと呼ばれます。 ウィキペディアから取得

私が質問している理由は、多数のワーカー プロセスを実行する Mac アプリを作成しているためです。これらのワーカー プロセスを、タスク マネージャーのプロセス階層のメイン プロセスの子として表示する必要があります。一部のワーカーは異なるユーザーとして実行され、Mac OS XI では子プロセスに特権を渡すために 2 回 fork する必要があります。現在デーモンとして実行されているワーカーを「ダブルフォーク」しているため、タスクマネージャーで見ると、ワーカーが親プロセスとして「init」を持っていることがわかります。

4

2 に答える 2

12

孤児は常に養子縁組されinitます。Unix親を非初期化プロセスに変更する方法はありません。


Linux 3.4 以降、これは厳密には当てはまりません。これを行う移植可能な Unix の方法はまだありませんが、Andy Lutomirski が指摘するように、Linux 3.4PR_SET_CHILD_SUBREAPERではprctl.

実際には、サブリーパーinit(1)はその子孫プロセスの役割を果たします。

于 2011-06-25T07:21:43.273 に答える
10

Linux では、PR_SET_CHILD_SUBREAPER を使用して、孤立した子孫を初期化するのではなく、親にする必要があることを示すことができます。

于 2013-08-06T20:26:50.110 に答える