Process
乾淨地殺死一個程序
我需要讓Linux Ubuntu平台自動啟動並殺死一個程序,例如,如果時間是早上8點,程序啟動,如果時間是晚上7點,程序會被殺死,那必須是每天,應該沒問題,如果時間間隔將容易改變。
我正在嘗試在 crontab 中使用簡單的程式碼:
28 12 * * * /home/pi/Desktop/start.sh 50 11 * * * pkill led.py
不要看時間,我試圖改變它們,
start.sh
啟動led.py
腳本,但如果我使用pkill -9 -f led.py
. 該程序被終止,但 LED 不會關閉。如果我手動啟動程序然後用Ctrl
+c
將其終止,則 LED 將關閉。哪裡有問題?為什麼我不能終止程序並同時關閉 LED?
當您鍵入
Ctrl
+c
時,通常會向程序發送一個“INT”信號。來自signal(7)
:Signal Value Action Comment ────────────────────────────────────────────────────────────────────── ... SIGINT 2 Term Interrupt from keyboard
程序為這個信號安裝一個處理程序是很常見的,允許它們在退出之前執行一些清理。對於您的
led.py
腳本,聽起來這個處理程序關閉了 LED。預設情況下,
pkill
發送kill
“TERM”(15)信號。(您還嘗試發送“KILL”(9)。)這些信號導致led.py
不那麼優雅地消亡,沒有機會執行其完成功能。為了
led.py
乾淨地完成,您應該發送“INT”(2)信號,與pkill -2 [process specifier]
您中的
pkill
命令crontab
也可能無法找到該程序,因為您提供的名稱不是它正在搜尋的名稱。來自pkill(1)
:-f,–滿
該模式通常僅與程序名稱匹配。設置-f時,將使用完整的命令行。
由於您的腳本,
led.py
大概是一個 python 腳本,程序名稱只是python
(或python3
,或類似)。完整的命令行類似於python led.py
,因此-f
選項可讓您匹配。pkill -2 -f led.py