免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6523 | 回复: 15

[Linux] 父进程退出后子进程为什么没有被1号init收养 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:57:09
发表于 2015-01-21 22:02 |显示全部楼层
系统:
  1. $ uname -a
  2. Linux yuhuashi-Linux 3.13.0-44-generic #73-Ubuntu SMP Tue Dec 16 00:22:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
复制代码
测试代码:
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <errno.h>
  5. #include <stdlib.h>

  6. int main (void)
  7. {
  8.         pid_t pid;

  9.         fflush(NULL);
  10.         pid = fork();
  11.         if (pid < 0)
  12.         {
  13.                 perror("fork()");
  14.                 exit(errno);
  15.         }
  16.         if (0 == pid)
  17.         {
  18.                 printf("chlidren run\n");
  19.                 int i = 0;
  20.                 for (i = 0; i < 30; i++)
  21.                 {
  22.                         printf("%d\n", i);
  23.                         sleep(1);
  24.                 }
  25.                 exit(0);
  26.         }
  27.         sleep(5);
  28.         printf("parend exit\n");
  29.         exit(0);
  30.         return 0;
  31. }
复制代码
父进程未退出时:
  1. $ ps -axj
  2. PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
  3. 8474  8505  8505  8505 pts/6     8692 Ss    1000   0:00 bash
  4. 8505  8692  8692  8505 pts/6     8692 S+    1000   0:00 ./a.out --父进程
  5. 8692  8693  8692  8505 pts/6     8692 S+    1000   0:00 ./a.out --子进程
复制代码
父进程退出后:
  1. $ ps -axj
  2. PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
  3. 2153  2166  2166  2166 ?           -1 Ss    1000   0:00 init --user
  4. 2166  8693  8692  8505 pts/6     8505 S     1000   0:00 ./a.out
复制代码
子进程没有被1号init收养,被2153 init --user 收养了,这个init --user 是个神马东西?

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
发表于 2015-01-21 23:34 |显示全部楼层
pid==0的这个分支应该是子进程的,你这里是子进程先退出啊

论坛徽章:
0
发表于 2015-01-22 21:12 |显示全部楼层
回复 1# sevenover


Ubuntu使用Upstart作为默认init系统.


Upstart can now run as a normal user process (whose PID is not 1) both as root or as a non-privileged user by passing the --user option. This feature is employed to supervise a user's desktop session (technically those sessions listed in /etc/upstart-xsessions). The Session Init is started /etc/X11/Xsession.d/99upstart which starts a Session Init for a user.

Upstart is now used to supervise a user's desktop session. To see details of the running Upstart session, either echo $UPSTART_SESSION (用这个命令可以查看本机--user的属性)to see the D-Bus address the Session Init process is listening to.

--user (Running a Session Init)
Runs Upstart as a Session Init.

   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:57:09
发表于 2015-01-22 23:42 |显示全部楼层
回复 3# sagarfan


    echo $UPSTART_SESSION 查看到的ID正是 init --user 的 PID。

论坛徽章:
0
发表于 2015-01-23 00:12 |显示全部楼层
回复 4# sevenover
恩恩,我之前也是遇到过同样的问题,是ubuntu的init系统的实现导致的,可能早期的ubuntu版本没有这个问题
而且在redhat也没有发现这个问题。


   

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
发表于 2015-01-23 16:01 |显示全部楼层
linux 下默认的行为是init 1来接收孤儿进程, 但这种行为可以修改,进程可以 通过设置PR_SET_CHILD_SUBREAPER来代替init成为新的reaper
upstart 应该就是修改了默认行为。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:57:09
发表于 2015-01-23 21:06 |显示全部楼层
回复 5# sagarfan


    嗯对,我也在redhat6、7上均没有发现这个问题,只有Ubuntu有这种情况,看来果然跟Ubuntu的实现有关系,谢谢啦。

论坛徽章:
0
发表于 2015-01-27 09:52 |显示全部楼层
汪峰和章子怡在一起后,为了让章子怡相信他永远不会背叛,就去纹身店想在胸口前纹个章字,无奈纹身师冷笑地说“纹章就不会背叛老婆吗?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2015-01-27 10:30 |显示全部楼层
这个程序能不能继续在讨论下。这个程序能正常结束吗,在子进程还没有输出完的时候,父进程也输出了。父子进程都有个exit啊。这个得怎么处理啊?

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
发表于 2015-01-27 10:40 |显示全部楼层
回复 9# sunlw78

两个都有exit,刷新两次缓冲区,其他的没什么讨论的了吧
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP