■子プロセスの終了を待つ

戻り値 失敗 -1

#include <stdio.h>
#include <sys/types.h>

int main(char*args[]){

	int PID = fork();
	if(PID == 0){
		//子プロセスの場合
		printf("Child Start\n");
		sleep(4);//4秒待機
		printf("Child End\n");
	}else{
		//親プロセスの場合
		printf("PalentStart\n");
		wait(&PID);
		printf("Palent End\n");
	}
	return 0;
}

処理結果
PalentStart
Child Start
Child End
Palent End


■親プロセスに値を返してプロセスの終了

#include <stdio.h>
#include <sys/types.h>

main(){

	exit(100);//親プロセス この場合はシェルに100を返す

}

シェルに返された値を表示するには、$? をシェルに入力
$?
bash: 100: command not found

■exitとwait

#include <stdio.h>
#include <sys/types.h>

main(){

	int PID = fork();
	if(PID == 0){
		//子プロセスの場合
		printf("Child Start\n");
		sleep(4);//4秒待機
		printf("Child End\n");
		exit(10);//プロセスの終了 親プロセスに 10 を返します
	}else{
		//親プロセスの場合
		printf("PalentStart\n");
		wait(&PID);//子プロセスが終了するまで待機します。
		printf("%d\n",PID/256);//子プロセスの返した値の表示
	}
}

処理結果
PalentStart
Child Start
Child End
10

注)子プロセスの exit() は 親がwait()で待機して受け取る必要があります。
受け取らないと、終了できずにゾンビプロセスになります。


▲トップページ > Linux と C