2014-05-22 151 views
0

我不確定這實際上是否是問題,但讓我解釋一下:我有一個由bash腳本啓動的python腳本。 bash腳本的工作已經完成,但是當我grep ps aux時,調用仍然存在。啓動python腳本的bash腳本不會自行停止

#!/bin/bash 
export http_proxy='1.2.3.4:1234' 
python -u /home/user/folder/myscript.py -some Parameters >> /folder/Logfile_stout.log 2>&1 

如果我用grep的ps aux | grep python我得到的python -u /home/user/folder/myscript.py -some Parameters結果。根據日誌文件python腳本正確關閉。 (結束腳本的代碼在腳本本身內。) 腳本每小時開始運行一次,而且我仍然可以看到幾小時前的所有呼叫。

在此先感謝您的幫助,提示或建議!

+1

因此,顯然你的Python腳本不會終止。沒有看到腳本的代碼,我們不能告訴你爲什麼它不會。 –

+1

你正在運行一個無限循環什麼的。如果不知道腳本的作用,很難診斷問題。 –

+0

我使用了gaoithe的答案,使它適用於我。所以,在我的Python腳本中,我檢查它是什麼時間以及何時達到硬編碼時間,腳本停止 - 使用atexit的清理函數。與此同時,啓動python腳本的Bash腳本同時休眠,然後殺死它的孩子和自己。測試它,它的工作..不是很漂亮,但工程。 – Jasi

回答

2

只要孩子(python腳本)正在運行,父bash腳本將保留。 如果您啓動在後臺運行的python腳本(在python行末尾添加&),則父項將退出。

#!/bin/bash 
export http_proxy='1.2.3.4:1234' 
python -u /home/user/folder/myscript.py -some Parameters >> /folder/Logfile_stout.log 2>&1 & 

如果您檢查進程列表(例如'ps -elf')。它會顯示孩子(如果仍在運行)。子PPID(父PID)將爲1(根PID),而不是父PID,因爲父母不再存在。

如果你的python腳本永遠不會退出,它最終可能會成爲一個問題。 您可以讓父母等待並殺死孩子,例如等待30秒,如果它仍然存在,殺死孩子:

#!/bin/bash 
export http_proxy='1.2.3.4:1234' 
python -u /home/user/folder/myscript.py -some Parameters >> /folder/Logfile_stout.log 2>&1 & 
sleep 30 
jobs 
kill %1 
kill -9 %1 
jobs 
+1

啊,小小&最後..我現在正在測試。我會報告回來! – Jasi

+1

它仍然不起作用。當我按照你的建議使用睡眠命令殺死它時,它當然會起作用,但是我想從其內部殺死腳本。我只是想確保父母死亡(如果可能,直接在它後面(bash腳本/父母)啓動腳本。 – Jasi

+1

如果你想讓python腳本自行結束,那麼這是python腳本的問題。如果python腳本自行結束,那麼父項將立即結束。所以你不需要任何睡眠和殺死的東西。 – gaoithe