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 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
写了一个测试程序,很简单的,如下 :
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 这些知识网上现在确实很多了,进程组 孤儿进程
页: [1]
查看完整版本: 在一个终端下开启某个进程,父进程是会话首进程,关闭终端后会发生什么?