A process can execute a different program by the exec() system call.
replaces the memory image of the caller with a new program.
intmain(){int pid;
pid =folk();if(pid ==0){printf("\n Hello, i am child! Now i'll run date \n");execlp("/bin/date","/bin/date",(char*)0);// execlp함수의 전달 형식}elseif(pid >0)printf("\n Hello, i am parent!\n");}
execシステム呼び出しで新しい起動を行うことができます. →execが完了すると戻れません.
wait()システムコール
プロセスAはwait()システムプロトコルを呼び出す.
カーネルは、プロセスAをサブプロセス終了(ブロック状態)
までスリープする.
Childプロセス終了時、カーネル起動プロセスA(レディ状態)
intmain(){int childPid;
childpid =folk();if(childpid ==0){<code for child process>}elsewait();//child가 종료될때까지 부모 프로세스는 잠들어있음}
exit()システムコール
プロセス終了
自動シャットダウン
最後の宣言が実行された後、exit()システムを介して
が呼び出される. コンパイラは、
プログラムに明記する必要がなく、メイン関数を戻り位置に配置します.
非自発的終了
親プロセス強制終了子プロセス
サブプロセスが制限を超えるリソース要求
子供に割り当てられたタスクは不要
キーボードを使用してkill、breakなどを叩く;
親が終了した場合
親プロセスの終了前に子プロセス
を終了する. サマリ fork() create a child (copy) exec() overlay new image wait() sleep until child is done exit() frees all the resources, notify parent