2011-11-14 153 views
4

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

我试图通过

nohup myInScript.sh & 

也是我试过在script.sh结束使用运行命令

disown -a[r] 

,也是我一直试图杀死它

kill $$ 

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

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

+1

有什么最后的命令? –

+0

最后的命令是: 回声完成。 脚本写入完成,但挂起。我需要按Ctrl + C来结束它。当然,在一种情况下,最后的命令是kill $$。 – uniquepito

回答

10

从内存中,如果任何仍在运行的孩子打开标准(终端)文件句柄,登录外壳将保留在其中,即使它完成。正常的(子进程)shell不会受到这个影响。所以看看如果改变你的nohup线以下是否有所不同。

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

在Centos5如果我跑parent.sh我不明白的问题。但是我运行ssh localhost parent.sh。在这种情况下,我上面显示的I/O重定向解决了这个问题。上述

+0

如果我不想要some.log,该怎么办? 似乎正是我的问题,因为(我忘了提及)我正在远程运行脚本vie ssh – uniquepito

+1

只是使用'/ dev/null'。基本上你只需要将它重定向到某个地方就可以将它从终端中分离出来。其实你可能会发现nohup自动将stdout和stderr重定向到nohup.out,所以你可能需要的只是stdin重定向。 – Sodved

+0

非常感谢!解决了这个问题。 – uniquepito

0

解决方案的工作大部分时间:

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

但我已经在那里都没有,不知道为什么的情况下。但无论如何,在命令没有的伎俩,甚至看起来更优雅:

at now -f my_script.sh