端末で開くときとダブルクリックして開くとPPIDが異なるのはなぜですか?

端末で開くときとダブルクリックして開くとPPIDが異なるのはなぜですか?

私はLinuxを使用しています。私が開くとき編集者geditコマンドでgnome-terminalでプログラムを実行すると、グラフィカルgeditテキストエディタが開きました。その後、geditにはPPIDがあります強く打つ

    ashokkrishna@ashokkrishna-Lenovo-B560:~$ ps -eaf | grep gedit
    ashokkr+  1682   820  3 04:09 pts/6    00:00:00 gedit
    ashokkr+  1695  1568  0 04:09 pts/9    00:00:00 grep --color=auto gedit

ここで、820はPIDです。強く打つ

ashokkr+   820 32505  0 03:32 pts/6    00:00:00 bash

しかし、geditアイコンをダブルクリックして同じgeditを開くと。

ashokkrishna@ashokkrishna-Lenovo-B560:~$ ps -eaf | grep gedit
ashokkr+  1855  1982 14 04:16 ?        00:00:00 /usr/bin/gedit

私は1982 PPIDを取得します。内部に

1982 ?        00:00:00 init

今私の質問はなぜ親プロセスどちらも状況が違いますか?
開始する正確なプロセスは何ですか?ユーザープロセス?

ベストアンサー1

あなたが見るものはあなたを驚かせてはいけません。 2つの異なる親プロセスを介して2つの異なる方法で実行されるため、geditどちらの場合もPPID(親プロセスID)が異なります。

1つ目は、Bashコマンドラインから始まったため、Bashの子です。

2番目のサブプロセスの最初のプロセスはオペレーティングシステムのGUIシステムになりますが、二股に分かれた背景に入ると孤立するから内部に採用してください。これは標準方式Unix/Linux システムで孤立プロセスを処理します。

シェルは2番目のケースをまったく扱いません。 Bashは、システムの一部のコアコンポーネントによって実行されるGnome Terminalのアワビバージョンです。 Ubuntu 14.10システムに表示されるものはupstart親システムですが、これはLinuxおよびUnixシステムによって異なります。ターミナルが閉じると、Bashも閉じられ、何らかの方法でバックグラウンドにインポートされなかったBashによって開始されたすべてのプログラムも閉じます。

最終的に、すべてのプロセスは通常、カーネルの周りのいくつかのラッパーを通してカーネルによって開始されます。execve(2)システムコール。しかし、ここではカーネルを親プロセスとして考えていません。カーネルは一部のユーザープロセスの代わりに実行されるため、そのプロセスは親プロセスとして記録されます。

その理由init(8)は、PID 1が上書きされていないためです。別の答えとして

おすすめ記事