[英]How can I start and stop a Python script from shell
謝謝你的幫助!
我想從shell腳本啟動和停止Python腳本。 開始工作正常,但我想在10秒后停止/終止Python腳本。 (這是一個不斷計數的計數器)。 芽是不會停止....我認為它掛在第一行。
什么是開始等待10秒的正確方法?
Shell腳本:
python /home/pi/count1.py
sleep 10
kill /home/pi/count1.py
它還沒有工作。 我明白在后台編寫腳本。 那工作! 但在做完后,我從樹莓樹上得到另一條評論:
python /home/pi/count1.py &
sleep 10; kill /home/pi/count1.py
/home/pi/sebastiaan.sh:line 19:kill:/home/pi/count1.py:參數必須是進程或作業ID
它必須在:(但是什么?感謝您的幫助!)
sleep 10; kill /home/pi/count1.py
你是對的,shell腳本在第一行“掛起”,直到python腳本完成。 如果沒有,則shell腳本將不會繼續。 因此,您必須在shell命令的末尾使用&
在后台運行它。 這樣,python腳本啟動,shell腳本繼續。
kill
命令不帶路徑,它需要一個進程id。 畢竟,您可能會多次運行相同的程序,然后嘗試殺死第一個或最后一個。
bash shell支持$!
變量,這是最后一個后台進程的pid。
您當前的示例腳本是錯誤的,因為它不會並行運行python作業和睡眠作業。 沒有裝飾,腳本將等待python作業完成,然后睡10秒,然后殺死。
你可能想要的是:
python myscript.py & # <-- Note '&' to run in background
LASTPID=$! # Save $! in case you do other background-y stuff
sleep 10; kill $LASTPID # Sleep then kill to set timeout.
如果操作系統允許,您可以終止任何其他進程。 即如果它不是屬於操作系統本身的一些關鍵過程。
命令kill使用PID來終止進程,而不是進程的名稱或命令。
使用pkill。
您也可以發送一個不同的信號,而不是SIGTERM(請求終止程序),您可能希望在Python應用程序中檢測並響應它。
例如,您可能希望檢查進程是否處於活動狀態並從中獲取一些數據。
為此,請選擇一個用戶自定義信號,並使用信號模塊在Python程序中注冊它們。
要查看腳本掛起的原因,請參閱Austin的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.