unix进程控制

今天看了apue第一章Unix System Overview的进程控制,对fork有了一些理解。有一个例程如下:
#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的状态返回值怎么用。要看完这么书才会懂的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值