Unixプロセス制御
今日apue第一章Unix System Overviewのプロセス制御を見て、forkについて少し理解しました.次のようなインスタンスがあります.
このプログラムループはfgetsで1行のコマンドを取得し、forkでサブプロセスを作成し、execlpでコマンドを実行します.
fork()は、1回に2回呼び出されて戻ります.呼び出された後、サブプロセスのpidを親プロセスに返し、0を返します(pidですよね?)サブプロセスを与えます.サブプロセスでelse文を実行する部分で、親プロセスで2番目のifを実行すると思います.
この本を読むと、execがどのように実行されているのか、fork後のプログラムが具体的にどのように実行されているのか、waitpidの状態戻り値がどのように使われているのかなど、多くの問題が理解できません.こんな本を読んでからわかるんだよ.
#include"apue.h"
#include<sys/wait.h>
int
main(void)
{
char buf[MAXLINE];
pid_t pid;
int status;
printf("%% ");
while(fgets(buf,MAXLINE,stdin)!=NULL){
if(buf[strlen(buf)-1]=='
')
buf[strlen(buf)-1]=0;
if((pid=fork())<0){
err_sys("fork error");
}else if(pid==0){//
execlp(buf,buf,(char *)0);
err_ret("couldn't execute:%s",buf);
exit(127);
}
if((pid==waitpid(pid,&status,0))<0)//
err_sys("waitpid error");
printf("%% ");
}
exit(0);
}
このプログラムループはfgetsで1行のコマンドを取得し、forkでサブプロセスを作成し、execlpでコマンドを実行します.
fork()は、1回に2回呼び出されて戻ります.呼び出された後、サブプロセスのpidを親プロセスに返し、0を返します(pidですよね?)サブプロセスを与えます.サブプロセスでelse文を実行する部分で、親プロセスで2番目のifを実行すると思います.
この本を読むと、execがどのように実行されているのか、fork後のプログラムが具体的にどのように実行されているのか、waitpidの状態戻り値がどのように使われているのかなど、多くの問題が理解できません.こんな本を読んでからわかるんだよ.