GNOME端末で親プロセスが実行される場合、孤立プロセスの親IDは1ではありません。

GNOME端末で親プロセスが実行される場合、孤立プロセスの親IDは1ではありません。

GNOME端末で新しいプロセスを開始し、そのプロセスが子プロセスをフォークします。ただし、親プロセスを終了すると、孤立プロセスの親IDは1(init --userpidを表す)以外の値になります。
仮想端末でこれを行うと、親プロセスpidは1になり、これはinitそのプロセスを表します。
GNOME端末で新しいプロセスを実行して、終了時に子プロセスの親プロセスpidがプロセスinit --userのpidの代わりに1になるようにするにはどうすればよいですか?
ありがとうございます。

答え1

私はすでに答えた。数ヶ月前にも同様の問題がありました。まず、技術的な詳細を見てください。ここでは、この回答があなたの状況をどのように扱うかを説明します。

前述のように、私を含むさまざまなデーモン監視ユーティリティの作成者はLinuxを利用しています。実際、あなたが見るものは実行中です。私が示したものとほぼ同じです。

欠けている唯一の情報はinit --userあなたの情報です。セッションインスタンス雷の金持ち。初めてログインすると起動し、ログアウトすると停止します。セッションごとの作業を実行できる場所(MacOS 10と似ていますが、まったく同じではありません)ユーザーエージェント以下launchd)あなたのものです。

数年前、Ubuntuの人々はセッションごとの作業にスタートアップを雇うためにグラフィックスデスクトップシステムに移行し始めました。 GNOME端末はセッションごとの作業から始まり、すべての孤児は最も近いサブリッパー(もちろんスタートアップのセッションごとのインスタンス)によって継承されます。

systemdの人々は最近数ヶ月間同じことを行ってきましたが、各ユーザーのsystemdインスタンスで個々のタブを別々のsystemdサービスとして実行するようにGNOME端末を設定しました。 (あなたの質問はsystemdではなくupstartに関するものであると言えますsystemd --user

Ubuntuセッション初期化プロセスのPIDの代わりに子プロセスの親PIDが1になるようにGNOME端末で新しいプロセスを実行するにはどうすればよいですか?

これは意図的に難しいです。サービスマネージャ考える孤児プロセスを追跡します。彼らは欲しいいいえ#1を処理するには、それらを失います。したがって、簡単なポイントはこれをやめることです。

ただプロセスを考えるのでこの質問をする場合しなければならない親プロセスIDが1の場合は、このアイデアを放棄してください。

これがデーモンの1つの側面であると誤って考えると、1990年代にIBMのシステムリソース(一部のUniceではそうではありませんがシステム全体ではありません)、コントローラやBernsteinのdaemontoolsのようなものが出現した後、親プロセスID 1を持つデーモンは保証されません。点に注意してください。 。とにかくログインセッションでダブルポーキングしてデーモンになることは不可能です。これは長い間時期尚早である考えと考えられてきました。

これが孤児プロセスについて自明であると間違っていると思われる場合は、以前の回答をもう一度お読みください。 #1の絶対主義は間違っており、この記事を書く時点で3年以上間違っていました。

奇妙な理由で子プロセスがある場合本当にこれが必要な場合は、この奇妙さの原因が何であるかを見つけて修正してください。これはバグである可能性があり、誰かが誤った設計仮定をした可能性があります。理由が何であれ、デーモン管理の世界は1990年代に変わり、Linuxは数年前にいくつかの変化を経験しました。今追いつく時間です。

追加読書

関連情報