Chinaunix

标题: 在一个终端下开启某个进程,父进程是会话首进程,关闭终端后会发生什么? [打印本页]

作者: pengxihan    时间: 2008-06-04 22:36
标题: 在一个终端下开启某个进程,父进程是会话首进程,关闭终端后会发生什么?
写了一个测试程序,很简单的,如下 :
while(1) {
   printf(“going to sleep!\n”);
  sleep(10);
}
然后我打开一个终端运行这个程序
#./myprogram &

然后#ps aux | grep myprogram可以看到myprogram对应的终端是pts/0
我又打开另一个终端,关闭第一个终端,在第二个终端下运行#ps aux | grep myprogram,发现myprogram已经停止运行了
也就是说关闭终端后,在这个终端下启动的myprogram也停止运行了。

接下来我写了一个简单的脚本,就是在脚本里启动我的程序:
#!/bin/sh
./myprogram &

同样在第一个终端下执行这个脚本,通过ps观察myprogram启动起来了,没有问题,然后关闭这个终端,开启第二个终端,再来ps查看,发现myprogram还是在运行着的,只是终端那一栏里变成了“?”

为什么通过脚本启动的程序可以不随着终端的关闭而停止呢?

[ 本帖最后由 pengxihan 于 2008-6-12 08:32 编辑 ]
作者: savagejin    时间: 2008-06-04 22:41
建议阅读父子进程及进程组等相关内容
作者: incle    时间: 2008-06-06 14:44
确实存在这样的问题.
作者: pengxihan    时间: 2008-06-12 08:38
原帖由 pengxihan 于 2008-6-4 22:36 发表
写了一个测试程序,很简单的,如下 :
while(1) {
   printf(“going to sleep!\n”);
  sleep(10);
}
然后我打开一个终端运行这个程序
#./myprogram &

然后#ps aux | grep myprogram可以看到myprog ...


对原来的程序进行了修改:
if (fork() == 0) {
   while(1) {
      printf("going to sleep!\n");
      sleep(10);
    }
} else {
   printf("parent exiting...\n");
   eixt(0);
}


同样在一个终端下运行该程序
#./myprogram &
关闭终端后,该程序继续存在,用ps命令可以发现,该进程的父进程变成了init进程,所以我这里猜想,当关闭一个终端后,一个会话中的首进程收到某个信号,然后将自己以及自己的子进程全部kill掉。
作者: 月是夜的明    时间: 2015-10-27 17:12
楼主搞清楚这个问题没有啊 我现在也在这个问题疑惑了
作者: yjh777    时间: 2015-10-28 22:23
2 楼的建议,你们都看了没有?
   stfw 这些知识网上现在确实很多了,进程组 孤儿进程




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2