宿題でこの質問をされたのですが、わからなくて困っています。誰かが私を助けることができれば、本当に感謝しています。
fork() に似ているが、親プロセスは終了する Linux ライブラリ関数は何ですか?
この宿題をあなたに割り当てた人は誰でも、 POSIX API ヘッダーexec()
から関数のファミリーを探していると確信しています。<unistd.h>
関数ファミリはexec()
新しいプロセスを実行し、現在実行中のプロセスのアドレス空間を新しく実行されたプロセスに置き換えます。
マニュアルページから:
関数の exec() ファミリは、現在のプロセス イメージを新しいプロセス イメージに置き換えます。
親プロセスを「終了」することとまったく同じではありませんが、実際には、親プロセスのアドレス空間が子プロセスのアドレス空間で消去 (置換) されるという同様の状況になります。
fork() に似ているが、親プロセスは終了する Linux ライブラリ関数は何ですか?
親プロセスは終了しないでください。子プロセスの実行が完了するまで待機する必要があるためです。その後、「ゾンビ状態」と呼ばれる状態になります。子プロセスの残り物をクリーンアップするのは親の責任です。 . 親プロセスは、子プロセスをクリーンアップせずに終了できますが、子プロセスの終了ステータスを親プロセスで収集してチェックする必要があるため、適切な方法ではありません。
これは、私が今言ったことを示すための例です...
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
int main()
{
pid_t cpid = 1 ;
int status;
cpid = fork();
// Load a application to the child using execl() , and finish the job
printf("Parent waiting for child to terminate\n");
int wait_stat = waitpid(-1,&status,0); // Parent will hang here till all child processes finish executing..
if (wait_stat < 0)
{
perror("waitpid error");
exit(-1);
}
// WIFEXITED and WEXITSTATUS are macros to get exit status information, of the child process
if (WIFEXITED (status))
{
printf("Child of id %u cleaned up\n",wait_stat);
printf("Exit status of application = %u\n",WEXITSTATUS(status));
}
}