shell是一个管理进程和运行进程的程序,下面我们就通过模拟一个shell程序这个实例来更好地认识认识在Linux/Unix系统中,进程的创建和结束,以及父子进程之间的一些关系。接下来先贴上源代码的中命令的读取部分:
numargs=0;
while(numargs<MAXARGS){
printf("Arg[%d]?",numargs);
if(fgets(argbuf,ARGLEN,stdin)&&*argbuf!='\n')
arglist[numargs++]=makestring(argbuf);
else{
if(numargs>0){
arglist[numargs]=NULL;
execute(arglist);
numargs=0;
}
}
}
这一段代码用于读取用户输入的命令,保存在arglist这个字符指针的数组中。因为进程间的通信的参数类型为字符串,所以我们选择指向字符串的指针构成的数组作为传递的参数,并且注意要将最后一个指针置NULL。当命令读取完毕完毕之后,即调用execute函数并且将arglist数组传递给它,进行关于子进程的一些操作。接下来,我们来看看execute函数具体的实现情况。
execute(char *arglist[]){
int pid,exitstatus;
pid=fork();//创建子进程
switch(pid){
case -1:
perror("fork failed");
exit(1);
case 0:
exec