今天看了apue第一章Unix System Overview的进程控制,对fork有了一些理解。有一个例程如下:
这个程序循环用fgets获得一行命令,然后用fork创建一个子进程,用execlp执行该命令。
fork()是一次调用两次返回:调用后,把子进程的pid返回给父进程,然后返回0(是指pid吧?)给子进程。我认为会在子进程执行else语句的部分,在父进程执行第二个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]=='\n')
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获得一行命令,然后用fork创建一个子进程,用execlp执行该命令。
fork()是一次调用两次返回:调用后,把子进程的pid返回给父进程,然后返回0(是指pid吧?)给子进程。我认为会在子进程执行else语句的部分,在父进程执行第二个if。
才看这本书,有很多问题不懂,理解不深刻:比如exec是怎么执行的,fork后程序具体是怎么样执行的,还有waitpid的状态返回值怎么用。要看完这么书才会懂的。