単一の C プログラムでゾンビと孤立したプロセスを実行するにはどうすればよいですか?

WBOY
リリース: 2023-08-25 16:21:06
転載
1321 人が閲覧しました

単一の C プログラムでゾンビと孤立したプロセスを実行するにはどうすればよいですか?

このセクションでは、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 サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート