免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2170 | 回复: 3
打印 上一主题 下一主题

[Linux] APUE第九章示例代码的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-22 17:40 |只看该作者 |倒序浏览
在APUE第九章的示例程序的解释中说到,“最后,要注意的是父进程终止时,子进程被置入后台进程组中,因为父进程是由shell作为前台作业执行的”。但我用debian7 run这个示例程序的时候,却并不像书上所说的那样,Ok,有图有真相
在上图中,我们看到,父进程结束时,子进程并没有被置入后台进程组中,而仍然是保留在前台进程组中,这是为什么?

为了节省大家的时间,我把书中源代码贴上来
  1. #include "apue.h"
  2. #include <errno.h>

  3. static void
  4. sig_hup(int signo)
  5. {
  6.         printf("SIGHUP received, pid = %d\n", getpid());
  7. }

  8. static void
  9. pr_ids(char *name)
  10. {
  11.         printf("%s: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d\n",
  12.             name, getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));
  13.         fflush(stdout);
  14. }

  15. int
  16. main(void)
  17. {
  18.         char        c;
  19.         pid_t        pid;

  20.         pr_ids("parent");
  21.         if ((pid = fork()) < 0) {
  22.                 err_sys("fork error");
  23.         } else if (pid > 0) {        /* parent */
  24.                 sleep(5);                /* sleep to let child stop itself */
  25.                 exit(0);                /* then parent exits */
  26.         } else {                        /* child */
  27.                 pr_ids("child");
  28.                 signal(SIGHUP, sig_hup);        /* establish signal handler */
  29.                 kill(getpid(), SIGTSTP);        /* stop ourself */
  30.                 pr_ids("child");        /* prints only if we're continued */
  31.                 if (read(STDIN_FILENO, &c, 1) != 1)
  32.                         printf("read error from controlling TTY, errno = %d\n",
  33.                             errno);
  34.                 exit(0);
  35.         }
  36. }
复制代码

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2012-12-23 15:03 |只看该作者
意思是说shell这个程序是那么做的, 不是说系统会把任何父进程和子进程这样处理.

论坛徽章:
0
3 [报告]
发表于 2012-12-23 15:18 |只看该作者
linux_c_py_php 发表于 2012-12-23 15:03
意思是说shell这个程序是那么做的, 不是说系统会把任何父进程和子进程这样处理.


这种再象,只能在debian上观察到,我在ubuntu上,观察不到这种现象,而在debian上才能观察到这种现象,又作何解释?

论坛徽章:
0
4 [报告]
发表于 2012-12-24 20:40 |只看该作者
难道用debian的坛友没遇到这个问题,我分别在debian6跟debian7上run过这个示例程序,结果跟1楼的图一样,但是用ubuntu则不会出现这种情况,难道这是debian的特色?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP