您好,欢迎访问三七文档
习题一、选择1.下列哪个命令不是显示多个环境变量的?(C)A、setB、exportC、pwdD、env2.获取某个环境变量值使用函数(A)A、getenvB、putenvC、setenvD、unsetenv3.wait(int*stat_loc)中的参数会接收(A)A、子进程退出状态B、fork的返回值C、父进程的PIDD、子进程的PID4.下面哪个函数可以获得当前进程父进程的ID(B)AgetpidBgetppidCgetpgrpDgetuid5.下列哪一个函数可以获得实际用户ID(A)A、getuidB、geteuidC、getpwuidD、getgid6.终止进程前,能够执行一些清理工作(如刷新缓冲区)的函数是(A)A、exitB、_exitC、pthread_exitD、abort7.execl调用成功后的返回值(D)A、’\0’B、-1C、NULLD、无法获取返回值8.如果可执行文件a.out的信息如下-rwsr-xr-x1rootroot2312月1922:52a.out则u1用户(uid=506)登录系统后执行a.out,那么a.out对应进程的实际用户id和有效用户id分别为(A)A5060B00C506506D05069.关于进程组和会话概念正确的是(D)A一个进程可以属于多个进程组B若具有多个进程的进程组的组长终止,则进程组也随之终止,其他进程自动退出C一个会话可以有多个前台和后台进程组D只有不是进程组长的进程才可以创建新会话10.下面哪个是对信号处理方式设置的系统调用(B)AkillBsignalCalarmDraise11.下面哪个不能发送信号(B)AkillBsignalCalarmDraise12.“kill–9进程号”命令可以立即终止进程的执行,那么,命令中的-9代表哪一个信号(B)A、SIGINTB、SIGKILLC、SIGIGND、SIGQUIT13.下列哪一个系统调用可以发送信号SIGALRM给进程(C)A、sleepB、pauseC、alarmD、signal14.管道的数据流向是(B)A双向B单向C单向双向可以选择D可随时调整数据流向15.默认情况下,在读写管道并且管道满时,继续向管道写数据,则会(B)A返回错误B阻塞C忽略本次写,继续执行D程序崩溃16.默认情况下,在读写管道并且管道空时,继续从管道读数据,则会(B)A返回0B阻塞C忽略本次读,继续执行D程序崩溃17.当以只读方式打开某个已经存在的fifo时,将会(B)A成功打开并继续执行B阻塞到以写方式打开该fifoC失败D程序崩溃18.当从管道读取数据后(B)A被读出的数据仍在管道中保存B被读出的数据将不在管道中存在C被读出的数据将同时被复制到某个文件中D管道中数据量不变19.进程A和进程B之间使用共享内存通信是指(C)A将进程A中的一部分拷贝到进程B的地址空间B将进程B中的一部分拷贝到进程A的地址空间C进程A和进程B共享某块物理内存空间。D进程A和进程B共享某块磁盘空间。20.假设某资源对应的信号量为0,则某进程申请使用该资源后,进程及信号量的值将(A)A进程阻塞,信号量为-1B进程使用该资源,信号量为-1C进程阻塞,信号量为0D进程使用该资源,信号量为021.假设某资源对应的信号量值为4,则某进程申请使用该资源后,进程及信号量的值将(B)A进程阻塞,信号量为3B进程使用该资源,信号量为3C进程阻塞,信号量为4D进程使用该资源,信号量为422.假设某资源对应的信号量值为-2,则某进程释放该资源后,将(A)A信号量为-1,唤醒第一个等待该资源的进程B信号量为-1,唤醒最后一个等待该资源的进程C信号量为0,不唤醒等待该资源的进程D信号量为0,唤醒第一个等待该资源的进程23.假设某资源对应的信号量值为-4,表明(C)A该类资源共有4个B该类资源目前还剩4个C等待该类资源的进程个数为4个D正在使用该类资源的进程有4个三、填空题1、进程映像主要由(PCB)(程序段)(数据段)(堆栈)组成。2、执行一个程序时,新进程会从调用它的进程处接收两个数据集(命令行参数)和(环境变量)。3、fork函数返回值有两个,对于子进程返回(0),对父进程返回(子进程进程号)。4、进程控制块的数据类型是(structtask_struct)。5、init进程进程号为(1)。6、system函数是通过(fork)、exec族函数以及waitpid来实现的。7、创建线程使用(pthread_create)函数。8、执行一个程序后,环境变量会传入新进程,新进程可以使用变量(char**environ)获取。9、若父进程在子进程终止之前终止,称这些子进程为(孤儿进程),(init)进程将成为这些进程的父进程。10、linux进程间通信方式主要有__信号____、____管道___、____信号量___、___共享内存___、___消息队列___、____socket____。11、信号的名字都以__SIG___开头,信号编号类型为__正整型__。12、信号来自内核,但生成信号的请求来自3处,分别是__用户按某些终端键__、__软硬件错误__、__调用函数或系统调用___。13、进程对信号的处理方式有__忽略__、_捕捉_、__执行系统默认动作__。14、进程设置信号的处理方式使用系统调用__signal或sigaction__。15、signal设置信号处理方式时,第一个参数是__信号值__,第二个参数如果忽略信号则为__SIG_IGN__,如果对信号执行系统默认动作则为_SIG_DFL_,如果捕获信号则为__指向参数为整型返回值为void的函数的指针__。16、alarm函数指定时间到会给本进程发送信号_SIGALRM_。17、信号集是__多个信号所组成集合的数据类型_。18、Shell中管道的命令为__|____,作用是__将前一个命令的输出作为后一个命令的输入__。19、管道的种类有两种,分别是____未命名管道__和__命名管道__,分别使用___pipe____和___mkfifo____系统调用创建。20、假设创建未命名管道时参数给定intfd[2],则__fd[1]__代表管道写端,_____fd[0]______代表管道读端。21、Linux中管道的大小默认为___4096字节___。22、若实现将标准输出重定向到文件描述符为6对应的文件上,则应使用语句__dup2(6,1);_或close(1);dup(6);_______。23、使用系统调用__mmap___可以完成通过普通文件进行进程间通信的功能。24、消息队列即一个消息的链表,链表中每个消息都包括两部分_消息类型_和_消息正文_。25、套接口有流式套接字,数据报套接字,原始套接字三种类型。26、四.简答题1.shell是如何运行程序的?(1)用户键入程序名(2)shell创建一个新的进程,shell将程序从磁盘载入,在新进程中执行该程序(3)shell等待该程序运行结束2.fork与vfork的区别?(1)fork创建的子进程复制父进程的整个地址空间,vfork不创建这一副本,子进程借用父进程的地址空间,直到其调用exec族函数或终止;(2)fork创建的子进程和父进程相互独立地运行,而vfork创建子进程后挂起父进程,直到子进程终止或调用exec族函数。3.试写出下列程序段的运行结果,并解释原因。假设父进程的标识为12589,子进程的标识为12612。#includesys/types.h#includestdlib.h#includestdio.h#includeunistd.hintmain(){pid_tpid;if((pid=fork())0){printf(forkerror\n);exit(1);}elseif(pid==0){printf(aaaaa%d\n,getpid());}else{wait();printf(bbbbb%d\n,getpid());}printf(%dprintthissentence\n,getpid());exit(0);}【参考答案】aaaaa1261212612printthissentencebbbbb1258912589printthissentence原因:(1)父进程有wait,所以子进程先运行,结束后父进程才运行(2)最后一句printf父子进程都执行,所以输出两句。4.试写出下列程序段的运行结果,并解释原因。假设父进程的标识为12589,子进程的标识为12612。#includesys/types.h#includestdlib.h#includestdio.h#includeunistd.hintglob=2;intmain(void){intvar;pid_tpid;var=58;printf(“beforefork\n”);if((pid=fork())0)perror(“forkerr”);elseif(pid==0){glob++;var++;}elsesleep(2);printf(“pid=%d,glob=%d,var=%d\n”,getpid(),glob,var);exit(0);}【参考答案】./a.outbeforeforkpid=12612glob=3,var=59pid=12589glob=2,var=58原因:创建子进程后,子进程拷贝父进程空间,因此获得glob和var初值父进程sleep,子进程先执行,对两个变量做加1操作。父子进程具有各自的进程空间,子进程对变量的修改不影响父进程。5.阅读如下代码段,若execlp调用成功的话,“Done!”会打印输出吗?为什么?#includeunistd.h#includestdio.hintmain(){printf(“Runningpswithexeclp\n”);execlp(“ps”,“ps”,“-af”,0);printf(“Done!\n”);exit(0);}【参考答案】运行这个程序时将得到通常的“ps-af”输出,但不会有“Done!”的打印显示,因为execlp调用成功后将发生进程代码段等部分的替换,不会返回。6.试写出下列程序段的运行结果,并解释原因。intx=0,inty=0;voidthread1(void){printf(Thisispthread1.thesentense1\n);y=7;sleep(1);printf(Thisispthread1.thesentense2\n);x=x+y;}voidthread2(void){printf(Thisispthread2.thesentense1\n);x=4;sleep(1);printf(Thisispthread2.thesentense2\n);y=8+y;}intmain(void){pthread_tid1,id2;pthread_create(&id1,NULL,(void*)thread1,NULL);pthread_create(&id2,NULL,(void*)thread2,NULL);pthread_join(id1,NULL);pthread_join(id2,NULL);printf(x=%d,y=%d\n,x,y);}【参考答案】Thisispthread1.thesentense1Thisispthread2.thesentense1Thisispthread1.thesentense2Thisispthread2.thesentense2x=11,y=15原因:(1)线程1先运行,线程2后运行。线程1执行sleep(1);后阻塞,线程2继续执行,线程2执行到sleep(1);时线程2阻塞,线程1阻塞结束继续执行,线程1执行结束后线程继续执行到结束。(2)线程1和线程2共享进程的数据段,因此共享变量x,y。7.进程间常用的6种通信方式是什么?简述他们的通信原理?(1)信号:用于通知接收进程有某
本文标题:6789习题答案
链接地址:https://www.777doc.com/doc-2895399 .html