资源描述:
《实验5:进程管理及操作》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验5进程管理及操作实验目的1.了解进程号,进程组号,会话号。2.清楚进程两个牛成子进程两数Z间的差别实验内容a)修改程序getpgid_example.c,使结果没有父进程为1的情况。并说明原因b)有3个进程,其中一个为父进程,其余为父进程的子进程,分别打印这三个进程的进程号,父进程号,进程组号。c)有3个进程,其中一个为父进程,其余为父进程的子进程,其中一个子进程运行“Is・1“指令,另一个子进程在暂停5s后界常退出,父进程不阻塞自己,并等待子进程的退出信息,待收到该信息,父进程返回。d)请修改提供的源码,实现
2、简单的myshell,实验结果实验总结#inelude#inelude#inelude#ineludevstring.h>#inelude#ineludevdirent.h>#definenormal0广一般的命令*/#defineout_redirect1/*输出重定向*7#definein」edirect2/*输入重定向*/#definehave_pipe3/*命令屮有管道*/voidprint_prompt();/*打印提示符
3、*/voidget」nput(char*);厂得到输入的命令*7voidexplain_input(char*,int*,chara[100][256]);/*对输入命令进行解析*/voiddo_cmd(int,chara[100][256]);/*执行命令*/intfind_command(char*);厂查找命令屮的可执行程序Tintmain(intargc,char**argv){inti;intargcount=0;chararglist[100][256];char**arg=NULL;char*but=
4、NULL;but=(char*)malloc(256);if(buf==NULL){perror("mallocfailed");exit(-1);}while(1){厂将buf所指向的空间清零*/memset(buf,0,256);print_prompt();get_input(buf);广若输入的命令为exit或logout则退出本程序*/if(strcmp(buf,"exit")==011strcmp(buf,"logout")==0)break;for(i=0;i<100;i++){arglist
5、[i][O]=, ,;argcoimt=0;explain_input(buf5&argcount,arglist);do_cmd(argcount,arglist);}广将buf所指向的内存释放*/if(but!=NULL){free(buf);but=NULL;}exit(O);}voidprint_prompt(){printf(”myshell$$”);}厂获取用户输入*/voidget_input(char*but)intlen二0;intch;ch=getchar();while(len<256&&c
6、h!=''){buf[len++]=ch;ch=getchar();}if(len==256){printf("commondistoolong”);exit(-1);厂输入的命令过长则退岀程序*/}buf[len]=‘叭len++;buf[len]=AO1;}广解析buf中的命令,将结果存入arglist屮,命令以回车符号结朿*//*如输入命令为“Is-I/tmp”,则arglist[0],arglist[1],arglist[2]分别为ls,・l和/tmp*/voidexplain_input(c
7、har*buf,int*argcount,chararglist[100][256])char*p=but;char*q=but;intnumber=0;while(1){if(p[0]=='jbreak;if(p[0]==-•)P++;else{q=p;number=0;while((q[0]!=1')&&(q[0]!='j){number++;q++;}//strncpy(arglist「argcount],p,number+1);arglist[*argcount][number]=' *;*arg
8、count=*argcount+1;p=q;voiddo_cmd(intargcount,chararglist[100][256]){intflag=0;inthow=0;厂用于指示命令屮是否含冇intbackground=0;/*标识命令屮是否冇后台运彳亍标识符*/intstatus;inti;intfd;char*arg[argcount+1];cha