在一个终端下开启某个进程,父进程是会话首进程,关闭终端后会发生什么?
写了一个测试程序,很简单的,如下 :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 编辑 ] 建议阅读父子进程及进程组等相关内容 确实存在这样的问题. 原帖由 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掉。 楼主搞清楚这个问题没有啊 我现在也在这个问题疑惑了 2 楼的建议,你们都看了没有?
stfw 这些知识网上现在确实很多了,进程组 孤儿进程
页:
[1]