【发布时间】:2014-01-18 14:53:00
【问题描述】:
我有一个关于 linux 进程的问题,我想不通。
这个问题来自《Advanced Bash Script》这本书,代码在这里:(我已经简化了)
#! /bin/bash
# spawn.sh
sleep 1
sh $0 # fork a child process here and into infinite loop
exit 0 # the script will never come here
当我在shell中运行./spawn.sh时,进程会卡在那里,一段时间后那里会有很多“sh spawn.sh”进程。
我认为现在流程之间的关系是这样的:
./spawn.sh 进程(pid: 10000) ---> 子进程(pid: 10001) ---> 子进程(pid:1002) --->子进程(pid:1003) --- > 等等
当我在 Shell 中按下 Control-C 时,父进程结束了,其所有子进程也结束了。这是我无法理解的地方。为什么所有经过处理的孩子都会灭亡?我认为进程之间的关系应该是这样的:
init(pid: 1) ---> 子进程(pid: 10001) ---> 子进程(pid:1002) --->子进程(pid:1003) ---> 以此类推
但事实是,好像父进程在结束时向它的子进程发送一个信号,从而导致所有子进程一个接一个地灭亡。这是正常的还是shell脚本的功能?
非常感谢您。
【问题讨论】:
标签: linux bash shell process pid