Q8.1 在图8-3程序中,若是用exit调用代替_exit调用,那么可能使标准输出关闭,是printff返回-1.修改该程序验证在你所使用的系统上是否会产生此种结果。若是并不是如此,你怎么处理才能获得相似的结果呢?ide
Q8.2 回忆图7-6中典型的存储空间布局,因为对应于每一个函数调用的栈帧一般存储在栈中,而且因为调用vfork后,子进程运行在父进程的地址空间中,若是不是在main函数中而是在另外一个函数中调用vfork,此后子进程又从该函数返回,将会发生什么?请编写一段测试程序对此进行验证,而且画图说明发生了什么?函数
Q8.3 重写图8-6的程序,把wait 换成waitid,不调用pr_exit,而从siginfo结构中去顶等价的信息。布局
Q8.4 当用 $./a.out 执行图8-13中的程序一次是,其输出是正确的,可是若将该程序按下列方式执行屡次,则输出不正确。测试
$ ./a.out; a.out; ./a.out进程
output from parentit
ooutput from parentclass
ouotuptut from childtest
put from parentfile
output from child程序
utput from child
缘由是什么?怎样才能更在此类错误?若是使子进程首先输出,还会发生此问题吗?
Q8.5 在图8-20所示的程序中,调用execl,制定pathname 为解释器文件,若是将其改成调用execlp,指定testinterp的filename,而且若是目录/home/sar/bin是路径前缀,则运行该程序时,argv[2]的打印输出是什么?
Q8.6 编写一段程序建立一个僵死进程,而后调用system执行ps(1)命令以验证该进程是僵死进程。
Q8.7 8.10节中说起POSIX.1要求在exec时关闭打开目录流,按下列方式对此进行验证:对跟目录调用opendir,查看在你系统上实现的DIR结构,而后打印执行是关闭标志。接着打开向同一目录读并打印执行是关闭标志。