C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

fork()は、C ++でwait()を使用してプロセスを下から上に実行します


fork()システムコールは、プロセスを2つのプロセスに分割するために使用されることがわかっています。関数fork()が0を返す場合、それは子プロセスであり、そうでない場合は親プロセスです。

この例では、プロセスを4回分割し、ボトムアップ方式で使用する方法を説明します。したがって、最初はfork()関数を2回使用します。したがって、子プロセスを生成し、次のフォークから別の子を生成します。その後、内側のフォークから自動的にそれらの孫が生成されます。

wait()関数を使用して遅延を生成し、ボトムアップ方式でプロセスを実行します。

サンプルコード

#include <iostream>
#include <sys/wait.h>
#include <unistd.h>
using namespace std;
int main() {
   pid_t id1 = fork(); //make 4 process using two consecutive fork. The main process, two children and one grand child
   pid_t id2 = fork();
   if (id1 > 0 && id2 > 0) { //when both ids are non zero, then it is parent process
      wait(NULL);
      wait(NULL);
      cout << "Ending of parent process" << endl;
   }else if (id1 == 0 && id2 > 0) { //When first id is 0, then it is first child
      sleep(2); //wait 2 seconds to execute second child first
      wait(NULL);
      cout << "Ending of First Child" << endl;
   }else if (id1 > 0 && id2 == 0) { //When second id is 0, then it is second child
      sleep(1); //wait 2 seconds
      cout << "Ending of Second child process" << endl;
   }else {
      cout << "Ending of grand child" << endl;
   }
   return 0;
}

出力

soumyadeep@soumyadeep-VirtualBox:~$ ./a.out
Ending of grand child
Ending of Second child process
Ending of First Child
Ending of parent process
soumyadeep@soumyadeep-VirtualBox:~$

  1. C ++を使用してOpenCVのデフォルトカメラからビデオをキャプチャするにはどうすればよいですか?

    ここでは、デフォルトのカメラにアクセスし、そのカメラからのビデオストリームを表示する方法を理解します。ラップトップでは、固定Webカメラがデフォルトのカメラです。デスクトップでは、デフォルトのカメラは、カメラが接続されているシリアルポートのシーケンスによって異なります。デフォルトのWebカメラからビデオストリームをキャプチャする場合、カメラについて何も知る必要はなく、カメラが接続されていることを確認する必要があります。 次のプログラムは、デフォルトのカメラからビデオストリームを取得し、リアルタイムで画面に表示します。 例 #include<opencv2/opencv.hpp>/

  2. システムがC++で処理できるゾンビプロセスの最大数

    タスクが与えられた場合、システムが処理できるゾンビプロセスの最大数を見つけることです。つまり、プログラムはその実行を停止しません。 ゾンビプロセス(廃止プロセスとも呼ばれます)は、exit()(システム呼び出し)を介してプロセスを完了したが、プロセステーブルにエントリが残っているプロセスです。 以下のプログラムで使用されるアプローチは次のとおりです プログラムを実行するには、を追加する必要があることに注意してください。 main()関数で、int型のnum =0を初期化します。これは、プログラムの実行が停止するまで繰り返されます。 0)のwhileステートメントを作成します