当前位置:嗨网首页>书籍在线阅读

15-练习

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

26.5 练习

26-1.  编写一程序以验证当一子进程的父进程终止时,调用getppid()将返回1(进程init的进程ID)。

26-2.  假设存在3个相互关联的进程(祖父、父及子进程),祖父进程没有在父进程退出之后立即执行 wait(),所以父进程变成僵尸进程。那么请指出孙进程何时被init进程收养(即孙进程调用 getppid()将返回 1),是在父进程终止后,还是祖父进程调用wait()后?请编写程序验证结果。

26-3.  使用 waitid()替换程序清单26-3(child_status.c)中的 waitpid()。需要将对函数 print WaitStatus()的调用替换为打印 waitid()所返回siginfo_t结构中相关字段的代码。

26-4.  程序清单26-4(make_zombie.c)调用了 sleep(),以便允许子进程在父进程执行函数system()前得到机会去运行并终止。这一方法理论上存在产生竞争条件的可能。修改此程序,使用信号来同步父子进程以消除该竞争条件。

①译者注:原文为“if on(previously unwaited-for)child of the calling process has yet terminated”。

②译者注:此处原文为previously unwaited-for。