使用后台进程退出shell脚本

时间:2011-11-14 14:08:54

标签: bash shell background-process

我需要以某种方式退出我的script.sh(返回代码 - 将是最好的),它在后台运行一些其他命令和其他脚本。

我试图通过

运行命令
nohup myInScript.sh &

我也尝试在script.sh

的末尾使用
disown -a[r]

而且我也试过杀了它

kill $$ 

但脚本只是在最后一个命令后挂起,不会退出。 如何在运行命令后强制退出? 请帮忙。

编辑:更具体地说,我是通过另一台机器上的ssh远程运行脚本。

2 个答案:

答案 0 :(得分:12)

从内存中,如果登录shell完成任何仍在运行的子节点的标准(终端)文件句柄打开,它将被保留。普通(子过程)shell似乎没有受此影响。因此,请查看将nohup行更改为以下内容是否有所不同。

nohup myInScript.sh >some.log 2>&1 </dev/null &

在Centos5上,如果我运行parent.sh,我就不会遇到问题。但是,如果我运行ssh localhost parent.sh,我会这样做。在这种情况下,我在上面显示的I / O重定向解决了这个问题。

答案 1 :(得分:3)

上述解决方案大部分时间都有效:

nohup myInScript.sh >some.log 2>&1 </dev/null &

但我有一个案例没有,不知道为什么。无论如何, at 命令完成了这个技巧,甚至看起来更优雅:

at now -f my_script.sh