Inter-process-communication-other-processes
その他のプロセス
これまで、プロセス、その作成、親および子プロセスなどについて説明してきました。 孤児プロセス、ゾンビプロセス、デーモンプロセスなど、他の関連プロセスについては説明せずに説明を不完全にします。
孤立プロセス
名前が示すように、孤立は親のないプロセスを意味します。 プログラムまたはアプリケーションを実行すると、アプリケーションの親プロセスはシェルになります。 fork()を使用してプロセスを作成する場合、新しく作成されたプロセスは子プロセスであり、子を作成したプロセスは親プロセスです。 同様に、これの親プロセスはシェルです。 もちろん、すべてのプロセスの親はinitプロセスです(プロセスID→1)。
上記は通常のシナリオですが、親プロセスが子プロセスの前に終了するとどうなりますか。 その結果、子プロセスは孤立プロセスになります。 その親はどうでしょうか。その新しい親はすべてのプロセスの親です。これはinitプロセス(プロセスID – 1)に他なりません。
次の例を使用して、これを試して理解してみましょう。
====/*ファイル名:orphan_process.c */
コンパイルおよび実行手順
ゾンビプロセス
簡単に言えば、2つのプロセス、つまり親プロセスと子プロセスがあると仮定します。 子プロセスを待機してから、プロセステーブルから子プロセスエントリをクリーンアップするのは、親プロセスの責任です。 親プロセスが子プロセスを待機する準備ができておらず、その間に子プロセスがジョブを完了して終了した場合はどうなりますか? これで、子プロセスがゾンビプロセスになります。 もちろん、親プロセスの準備が整うと、ゾンビプロセスはクリーンアップされます。
例の助けを借りてこれを理解しましょう。
====/* ファイル名:zombie_process.c */
コンパイルおよび実行手順
デーモンプロセス
簡単に言えば、関連するシェルや端末を持たないプロセスはデーモンプロセスと呼ばれます。 なぜこれが必要なのですか? これらは、事前定義された間隔でアクションを実行し、特定のイベントに応答するためにバックグラウンドで実行されるプロセスです。 デーモンプロセスは、バックグラウンドプロセスとして実行されるため、ユーザーの操作は必要ありません。
通常、内部Linuxデーモンプロセスは、カーネルデーモン(ksoftirqd、kblockd、kswapdなど)、印刷デーモン(cupsd、lpdなど)、ファイルサービスデーモン(smbd、nmbdなど)などの文字「d」で終了します。 、管理データベースデーモン(ypbind、ypservなど)、電子メールデーモン(sendmail、popd、smtpdなど)、リモートログインおよびコマンド実行デーモン(sshd、in.telnetdなど)、ブートおよび構成デーモン(dhcpd 、udevdなど)、initプロセス(init)、cronデーモン、atdデーモンなど。
デーモンプロセスの作成方法を見てみましょう。 手順は次のとおりです-
- ステップ1 *-子プロセスを作成します。 これで、親プロセスと子プロセスの2つのプロセスができました。
通常、プロセス階層は、シェル→親プロセス→子プロセスです。
- ステップ2 *-終了して親プロセスを終了します。 子プロセスは孤立プロセスになり、initプロセスに引き継がれます。
現在、階層はINIT PROCESS→CHILD PROCESSです
- ステップ3 *-呼び出しプロセスがプロセスグループリーダーでない場合、setsid()システムコールを呼び出すと、新しいセッションが作成されます。 これで、呼び出しプロセスが新しいセッションのグループリーダーになります。 このプロセスは、この新しいプロセスグループとこの新しいセッションの唯一のプロセスになります。
- ステップ4 *-プロセスグループIDとセッションIDを呼び出しプロセスのPIDに設定します。
- ステップ5 *-端末とシェルがアプリケーションから切断されたため、プロセスのデフォルトのファイル記述子(標準入力、標準出力、標準エラー)を閉じます。
====/*ファイル名:daemon_test.c */