Linux でプロセスを作成する場合、この目的を達成するために一般的に使用される 3 つのコマンドがありますfork
:exec
と wait
。これら 3 つのコマンドについて詳しく説明します。
1. fork コマンド:fork
このコマンドは、新しいプロセスを作成するために使用されます。新しいプロセスは、現在のプロセス (親プロセス) のコピーです。コード、データ、ファイル記述子、プロセス コンテキスト、および親プロセスのその他の情報を継承します。親プロセス。新しいプロセスと親プロセスは fork
コマンドに続くコードを同時に実行するため、異なるブランチで異なる操作を実行できます。
fork
このコマンドにはパラメータはなく、構文は次のとおりです。
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
コマンドの呼び出しが成功する fork
と、コマンドは 2 回戻ります。1 回目は親プロセスで、新しく作成された子プロセスの PID (プロセス ID) を返し、もう 1 回は子プロセスで 0 を返します。失敗した場合は -1 を返します。
2. exec コマンド:exec
このコマンドは、現在のプロセスで新しいプログラムを実行するために使用されます。コマンドが呼び出されると exec
、現在のプロセスのコードとデータは新しいプログラムのコードとデータに置き換えられますが、プロセスの PID やファイル記述子などの情報は変更されません。これにより、完全に新しいプロセスを作成しなくても、現在のプロセスで新しいプログラムを開始できます。
exec
このコマンドには execl
、execv
、execle
、execve
などの複数のバリエーションがあり、さまざまなニーズに応じてコマンド ライン パラメータや環境変数などの情報を渡すことができます。
3. wait コマンド:wait
このコマンドは、子プロセスの終了を待つために親プロセスによって使用されます。親プロセスが子プロセスを作成する場合、子プロセスの終了後も親プロセスのコードを実行し続けたい場合は、コマンドを使用できます wait
。wait
このコマンドは、子プロセスが終了するまで親プロセスを一時停止します。子プロセスが終了した場合、wait
コマンドはすぐに戻ります。
wait
このコマンドにはパラメータはなく、構文は次のとおりです。
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
このうち、status
パラメータは子プロセスの終了ステータスを受け取るために使用され、子プロセスの終了ステータスを判断するために使用できます。
要約すると、fork
このコマンドは新しいプロセスを作成するために使用され、exec
コマンドは現在のプロセスで新しいプログラムを実行するために使用され、wait
コマンドは親プロセスが子プロセスの終了を待つために使用されます。これら 3 つのコマンドを組み合わせることで、複雑なプロセス管理と制御が可能になります。