Process
查找並殺死正在使用串列埠的程序
我有多個串列埠連接到每個設備。它們被列為
/dev/ttyUSB*
。現在,在我執行腳本之前,我需要確保使用 python 腳本沒有其他程序正在使用這些kermit
腳本(這樣訪問不會被拒絕)login_init
。我試過ps
和lsof
命令。lsof
給出了以下輸出:sof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME login_ini 13395 user4 4u CHR 188,9 0t0 512 /dev/ttyUSB9 python 14410 user4 6u CHR 188,9 0t0 512 /dev/ttyUSB9
我得到了
pid
程序的 s 沒問題,但是當我發出killall
命令時,它說沒有找到程序,如下所示:user4@user-pc-4:~/Scripts$ killall -9 13395 13395: no process found user4@user-pc-4:~/Scripts$ killall -9 14410 13395: no process found
這是正確和唯一的方法還是有更好的方法來做到這一點?
killall
期望程序名稱的子字元串作為參數。要通過程序 ID 終止程序,請使用kill
.您可以使用命令直接殺死所有打開文件的程序
fuser
。fuser -k /dev/ttyUSB9
由於您已經擁有程序 ID,因此您可以使用
kill
,即kill -TERM 13395 14410
(我建議
SIGTERM
先發送一個普通的,然後SIGKILL
再按 - 按鈕。)
killall
Linux 系統中使用的命令按名稱殺死程序,同樣如此pkill
。但是,在其他系統上,例如 Solaris,會killall
殺死所有內容(作為關閉過程的一部分),如果您曾經使用過這些系統,請記住這一點。