我想知道为什么在Bash shell中的后台进程会出现不同的行为
情况1:使用Putty(SSH)登录Unix服务器
- 默认使用csh shell
- 我改变为bash shell
- 输入"sleep 2000 &"
- 按回车键
它给了我作业号。 现在我通过单击putty窗口中的"x"来结束了我的会话。然后打开另一个会话并尝试查找该进程...该进程已经死亡。
情况2:使用Putty(SSH)登录Unix服务器
- 默认使用csh shell
- 我改变为bash shell
- vi mysleep.sh
- sleep 2000 & 保存mysleep.sh
- ./mysleep.sh
不同之处在于,我将sleep命令存储在文件中并执行该文件,而非直接执行sleep命令。
现在我通过单击putty窗口中的"x"来结束了我的会话。然后打开另一个会话并尝试查找该进程...该进程仍然存在。
不确定为什么会出现这种情况。 我以为我需要在bash中进行disown才能在注销后运行进程。
我发现父进程ID中的一个差异。在第二种情况下,sleep 2000的父进程ID变为1。看起来当mysleep.sh的进程死亡时,内核将父进程分配给了1。