私は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が上書きされていないためです。別の答えとして。