このセクションでは、C/C++ の単一プログラムでゾンビ プロセスと孤立プロセスを実行する方法を説明します。本題に入る前に、まずゾンビプロセスと孤立プロセスとは何かを理解しましょう。
ゾンビ プロセスとは、実行は完了したがまだスペースが残っているプロセスを指します。プロセステーブルのエントリ。親プロセスは依然として子プロセスの終了ステータスを読み取る必要があるため、通常、ゾンビ プロセスは子プロセスで発生します。 wait システムコールを使用してこれが完了すると、ゾンビプロセスはプロセステーブルから削除されます。これは、ゾンビ プロセスの収穫と呼ばれます。
孤立したプロセスとは、親プロセスが終了または完了したにもかかわらず、まだ実行されているプロセスです。プロセスは、意図的または非意図的に孤立する場合があります。
意図的に孤立したプロセスは、手動サポートなしでバックグラウンドで実行されます。これは通常、無期限に実行されるサービスを開始するため、またはユーザーが気付かないうちに長時間実行されるジョブを完了するために行われます。
孤立したプロセスは、親プロセスがクラッシュまたは終了したときに誤って作成されます。プロセス グループ メカニズムを使用して、意図しない孤立プロセスを回避します。
次のコードでは、ゾンビプロセスと孤立プロセスを同時に実行します。ここには、子プロセスを持つ親プロセスがあり、この子プロセスには別の子プロセスがあります。コントロールが子プロセスに挿入された場合、親プロセスを完了できるように実行を 5 秒間停止します。したがって、子プロセスは孤立プロセスになります。孫プロセスはゾンビ プロセスに変換されます。孫プロセスは、その親プロセス (メインプロセスの子) が 1 秒間スリープすると実行を完了します。したがって、孫プロセスは terminate を呼び出すことはなく、そのエントリはプロセス テーブルに存在します。
#include <stdio.h> #include <unistd.h> int main() { int x = fork(); //create child process if (x > 0) //if x is non zero, then it is parent process printf("Inside Parent---- PID is : %d</p><p>", getpid()); else if (x == 0) { //for chile process x will be 0 sleep(5); //wait for some times x = fork(); if (x > 0) { printf("Inside Child---- PID :%d and PID of parent : %d</p><p>", getpid(), getppid()); while(1) sleep(1); printf("Inside Child---- PID of parent : %d</p><p>", getppid()); }else if (x == 0) printf("Inside grandchild process---- PID of parent : %d</p><p>", getppid()); } return 0; }
soumyadeep@soumyadeep-VirtualBox:~$ ./a.out Inside Parent---- PID is : 3821 soumyadeep@soumyadeep-VirtualBox:~$ Inside Child---- PID :3822 and PID of parent : 686 Inside grandchild process---- PID of parent : 3822 soumyadeep@soumyadeep-VirtualBox:~$
以上が単一の C プログラムでゾンビと孤立したプロセスを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。