- 论坛徽章:
- 0
|
脚本mysh如下:
#!/bin/bash
#mysh
echo $$ 1>myresult
sleep 100000
------------------------------------------------------------------
情况一:
1, 在当前bash中运行echo $$, 得到当前bash的进程号为:xxxx
2, 以./mysh &运行脚本,会显示出该进程的ID为yyyy, 察看myresult文件,也是yyyy
3, 运行ps -aux察看,发现多了两行:/bin/bash ./mysh和sleep 100000. 且前者的进程号即为yyyy
4, 以pstree|more察看,发现有如下结果:()是自己注的。
init-+-...
.
.
.
|-login---bash(xxxx)-+-more
|-mysh(yyyy)---sleep
|-pstree
.
.
.
--------------------------------------------------------------------------------------------
情况二:
1,在当前bash中运行echo $$, 得到当前bash的进程号为:xxxx
2,以. ./mysh &运行脚本,会显示出该进程的ID为yyyy, 察看myresult文件,却为xxxx
3, 运行ps -aux察看,发现多了两行:bash和sleep 100000. 且前者的进程号即为yyyy
4, 以pstree|more察看,发现有如下结果:()是自己注的。
init-+-...
.
.
.
|-login---bash(xxxx)-+-more
|-bash(yyyy)---sleep
|-pstree
.
.
.
--------------------------------------------------------------------------------------
?1, 首先是两种情况中myresult内容的差别是什么原因?通常的解释都是情况一的运行方式会产生一个subshell,情况二是在当前shell中完成的。很遗憾,我就是不能很好的理解。如两者的进程图所示,其结构并没有什么差别?又如何能说一个有subshell而另一个没有呢?shell是不是就是bash之类的,或者仅仅是一个概念性的东西?哪位大哥能详细帮小弟解释一下?
?2,在这两种情况中,如果运行kill -9 yyyy, 再次察看进程结构却发现sleep被init进程“领养”了,为什么不是被xxxx进程领养呢?
现在还没有分送,抱歉!
[ 本帖最后由 water2oil 于 2007-9-3 21:58 编辑 ] |
|