2011-11-14 151 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