Q8.1 在图8-3程序中,如果用exit调用代替_exit调用,那么可能使标准输出关闭,是printff返回-1.修改该程序验证在你所使用的系统上是否会产生此种结果。如果并非如此,你怎么处理才能得到类似的结果呢?

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 parent

ooutput from parent

ouotuptut from child

put from parent

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结构,然后打印执行是关闭标志。接着打开向同一目录读并打印执行是关闭标志。