Process

查找並殺死正在使用串列埠的程序

  • February 27, 2021

我有多個串列埠連接到每個設備。它們被列為/dev/ttyUSB*。現在,在我執行腳本之前,我需要確保使用 python 腳本沒有其他程序正在使用這些kermit腳本(這樣訪問不會被拒絕)login_init。我試過pslsof命令。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再按 - 按鈕。)

killallLinux 系統中使用的命令按名稱殺死程序,同樣如此pkill。但是,在其他系統上,例如 Solaris,會killall殺死所有內容(作為關閉過程的一部分),如果您曾經使用過這些系統,請記住這一點。

引用自:https://unix.stackexchange.com/questions/355853