[英]Python gracefully stop a script from Laravel/Php
我正在尋找一種從我從Laravel應用程序啟動的長時間運行的python腳本中正常退出的方法。
我這樣做的實際過程是:
shell_exec
啟動python腳本 從shell_exec
檢索pid
然后執行kill可能是一種選擇,但是我實際上不希望腳本優雅地停止並退出。
我的實際配置有效,但我正在尋找更好的方法。
從
shell_exec
檢索pid
然后執行kill可能是一種選擇,但是我實際上不希望腳本優雅地停止並退出。
這可能是您最好的選擇。 您可以使用SIGTERM
禮貌地要求腳本退出:
SIGTERM
信號是用於導致程序終止的通用信號。 與SIGKILL
不同,此信號可以被阻止,處理和忽略。 這是禮貌地要求程序終止的正常方法。
這實際上是在GUI應用程序中單擊關閉按鈕時發生的情況。
在您的Python代碼中,您可以使用signal
模塊以及所需的任何清除邏輯來處理SIGTERM
,然后退出:
import signal, os def handler(signum, frame): print('Signal handler called with signal', signum) raise OSError("Couldn't open device!") # Set the signal handler and a 5-second alarm signal.signal(signal.SIGALRM, handler) signal.alarm(5) # This open() may hang indefinitely fd = os.open('/dev/ttyS0', os.O_RDWR) signal.alarm(0) # Disable the alarm
另請參見此堆棧溢出答案 ,以了解在退出之前要清理的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.