免费注册 查看新帖 |

Chinaunix

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

这个都不清楚就别说会用linux [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-10 12:36 |显示全部楼层 |倒序浏览

论坛徽章:
0
2 [报告]
发表于 2010-09-10 14:17 |显示全部楼层
回复l.darkfire:
谢谢回答。不过对于你说的有一些问题。
“1. source不开新进程,仅仅是在当前bash环境中执行另外一段bash代码,”
请参看现象2中的sleep 104部分。
root      6209     1  0 11:01 ?        00:00:00 gnome-terminal //图形界面,父进程为1,没有问题
root      6290  6209  0 11:02 pts/4    00:00:00 bash //本身的pts/4,父进程为图形界面,没有问题
root      6388  6290  0 11:02 pts/4    00:00:00 bash //运行sleep 104命令的shell,父进程为6290
root      6426  6388  0 11:04 pts/4    00:00:00 sleep 104 //sleep 104命令,父进程shell为6388

按你的意思,6426(sleep 104命令)的父进程应该为pts/4,也就是6290.
可现在的情况是sleep命令它的父进程为6388.也就是pts/4(6290)又开了一个shell来执行sleep.

论坛徽章:
0
3 [报告]
发表于 2010-09-10 14:24 |显示全部楼层
我就是不清楚这个是怎么来的 -_-!

论坛徽章:
0
4 [报告]
发表于 2010-09-10 14:35 |显示全部楼层
回复l.darkfire:
对于你说的&后台的问题,我重新编辑了一下帖子。你能再帮我解释一下这个现象么,谢谢!
后台&问题:
现有脚本first.sh和second.sh
[root@localhost /]# cat /abc/first.sh
#!/bin/bash
. /abc/second.sh &
[root@localhost /]# cat /abc/second.sh
#!/bin/bash
while true
do
  sleep 500
done

现在执行
[root@localhost /]# source /abc/first.sh &
[1] 10458
[root@localhost /]# jobs
[1]+  Done                    source /abc/first.sh
[root@localhost /]#
ps auxf回车:
root     10386  0.0  1.6  81644 17388 ?        Sl   14:24   0:00 gnome-terminal
root     10391  0.0  0.0   2480   656 ?        S    14:24   0:00  \_ gnome-pty-h
root     10392  0.0  0.1   4912  1556 pts/1    Ss   14:24   0:00  \_ bash
root     10461  0.0  0.0   4608   920 pts/1    R+   14:27   0:00      \_ ps auxf
root     10390  0.0  0.0  12304   952 ?        S    14:24   0:00 scim-bridge
root     10459  0.0  0.0   4912   696 pts/1    S    14:27   0:00 bash
root     10460  0.0  0.0   3956   472 pts/1    S    14:27   0:00  \_ sleep 500
发现10459这个bash的父进程已经是根了。

然后退出这个终端,重新开一个终端
ps auxf回车:
root     10459  0.0  0.0   4912   696 ?        S    14:27   0:00 bash
root     10460  0.0  0.0   3956   472 ?        S    14:27   0:00  \_ sleep 500
root     10492  3.2  1.6  81528 17256 ?        Sl   14:28   0:00 gnome-terminal
root     10496  0.0  0.0   2480   656 ?        S    14:28   0:00  \_ gnome-pty-h
root     10497  0.3  0.1   4912  1496 pts/2    Ss   14:28   0:00  \_ bash
root     10518  0.0  0.0   4608   920 pts/2    R+   14:28   0:00      \_ ps auxf
root     10495  0.0  0.0  12304   952 ?        S    14:28   0:00 scim-bridge
发现10459这个进程还在。
有的人说&放在后台会受终端的影响,可是现在这个10459和10460进程都在,怎么解释?

论坛徽章:
0
5 [报告]
发表于 2010-09-10 14:38 |显示全部楼层
回复6楼的说法:
对于这种说法,是不是我可以这样理解:当source command &。有后台&出现的情况,source也会出现fork的情况?

论坛徽章:
0
6 [报告]
发表于 2010-09-10 14:58 |显示全部楼层
回复9楼:

那请看我后来补充的这个例子(first,second)。
这个终端如果在断开时,没有发SIGHUP信号。现在的现象是,10459的父进程为什么是1.这个进程10459是怎么来的?
[root@localhost /]# source /abc/first.sh &
[1] 10458
[root@localhost /]# jobs
[1]+  Done                    source /abc/first.sh
source first.sh进程是10458,就1句话,放在后台执行second.sh。所以马上jobs,看到已经Done。应该可以确定10459的父进程是10458.而10458是first而并非是本身的pts/1这个Shell(10392)。
之间的关系可以认为是这样
init->terminial->10392(pts/1)->10458(first)->10459(second)->10460(sleep)
因为10458瞬间执行完。而现在我不论是否退出终端,ps auxf和ps -ef看到10459的父进程都变为1了。这是怎么解释?为什么10459的父进程会变为1?

论坛徽章:
0
7 [报告]
发表于 2010-09-10 15:06 |显示全部楼层
可是在没有退出终端的时候,10459的父进程应该是10392啊.因为没有退出终端呢。刚执行完source first & 后执行ps看结果,看到的10459的父进程也为1了。
而且现在这些都是用source执行的,居然都是父子进程的关系,就是你刚才说的source script &的方式会fork一个shell。所以我最开始对这事很不明白。

论坛徽章:
0
8 [报告]
发表于 2010-09-10 15:14 |显示全部楼层
哦,好的。非常感谢!

论坛徽章:
0
9 [报告]
发表于 2010-09-10 15:15 |显示全部楼层
CU的高手就是多啊,这个事纠结了我1天了。

论坛徽章:
0
10 [报告]
发表于 2010-09-10 15:24 |显示全部楼层
还有1个问题。
init->terminial->10392(pts/1)->10458(first)->10459(second)->10460(sleep)
在10458瞬间执行完退出的时候,为什么没有给10459发SIGHUP信号呢。如果发了,10459就应该结束的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP