IPCに関する質問[閉じる]

IPCに関する質問[閉じる]

こんにちは。この内容を理解するのに役立つすべての人に感謝します。

Linuxでは、親プロセスと子プロセスの間でIPCがどのように機能するかについて30,000フィートのビューがあると思います。 APIを介してカーネルとの通信が正常に機能しています。

たとえば、... bashシェルがpsコマンドプロセスを分岐している場合... psプロセスがIPCを使用して結果をbashシェルに返すとします...それが動作する方法であれば、APIを介して進行します.. .そうですが、具体的に言及された内容が見つかりません。

もう一度…誰でも私に助けてくれてありがとう。

答え1

あなたの例では、実際のIPCはあなたが思うよりもはるかに少ないです。

bashコマンドが実行されると、pspsプロセスは親プロセスから標準入力、標準出力、および標準エラー設定のファイルハンドル、現在の作業ディレクトリなどを継承します。

このpsコマンドは、単に出力を標準出力ファイル・ハンドルに書き込みます。このハンドルは通常、カーネルTTYドライバが担当するユーザーのTTYデバイスを指します。コンソールセッション(Linux仮想コンソールであれ実際のシリアルコンソールであれ)は、最新のシステムからユーザー画面に直接接続します。 TTYデバイスは通常、別のデバイスに返される擬似TTYスレーブデバイスです。プロセス:このプロセスは、ローカルGUIデスクトップのターミナルエミュレーションプログラムであるか、リモートsshdログインに使用できます。bashコマンドを実行したシェルはpsまったく関与しません。

bashあなたの例では、プロセス間通信はps非常に簡単です。psプロセスが終了すると、最初は「ゾンビ」状態になります。プロセスメモリは解放され、残っているのはプロセステーブルスロットのみですps。プロセス終了生成された戻りコード。

bashカーネルは、それを探しているゾンビプロセスの親プロセスにSIGCHLD信号を送信しますwait(2)。信号が受信されると、プロセスが終了したときに生成された戻りコードbashも受信されます。psシェルはそれを特殊なシェル変数に入れて、$?新しいコマンドプロンプトを出力するか、実行中のスクリプトを続行します(psコマンドがスクリプトから開始された場合)。

同時に、リターンコードが親プロセスに正常に渡されたため、カーネルはpsこの方法で親プロセスが占有するプロセステーブルスロットを解放し、ゾンビプロセスは保留になります。

関連情報