複数のシリアルポートがあり、デバイスが各ポートに接続されています。スクリプトを実行する前に、pythonスクリプトを使用して他のプロセスがそれを使用していない(アクセスが拒否されないように)/dev/ttyUSB*
確認する必要があります。試して注文してみてください。次の出力を提供します。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
これが正しい唯一の方法ですか、それとも良い方法がありますか?
答え1
killall
引数としてプログラム名の部分文字列が必要です。プロセスIDでプロセスを終了するにはkill
。
このコマンドを使用すると、開いているファイルを含むすべてのプロセスを直接終了できますfuser
。
fuser -k /dev/ttyUSB9
答え2
すでにプロセスIDがあるので、kill
次のものを使用できます。
kill -TERM 13395 14410
SIGTERM
(最初に通常のメールを送信してからSIGKILL
- ボタンを押すことをお勧めします。)
これkillall
Linuxシステムで使用されるコマンドプロセスを終了して名前、良いpkill
。ただし、他のシステム(Solarisなど)ではkillall
殺すすべて(終了手順の一部として)使用する場合は、この点に注意してください。
答え3
次のコマンドを使用してpidを終了します。
sudo kill -9 13395
sudo kill -9 14410
単一のコマンドですべて(/dev/ttyUSB9)を終了するには、次のコマンドを使用します。
sudo pkill -9 ttyUSB9
実行中のプロセスIDを一覧表示するには、次のコマンドを使用します。
ps -ef | grep ttyUSB9
実行中のプロセスIDの数を一覧表示するには、次のコマンドを使用します。
ps -ef | grep ttyUSB9 | wc -l
答え4
私は長い間これをうまくやってきましたsudo fuser -k
。
私の代替free_serial
スクリプトは次のとおりです。
# expects serial port string as command line argument
# run with sudo if needed:
# sudo free serial /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AI06HY2F-if00-port0
TTY_NAME=$(ls -l $0 | grep -o '[^/]*$')
#echo $TTY_NAME
#https://unix.stackexchange.com/questions/308866/how-to-find-processes-using-serial-port
PID=$(ls -l /proc/[0-9]*/fd/* 2> /dev/null |grep /dev/ | grep $TTY_NAME | grep -o 'proc/.*' | cut -d "/" -f2 2> /dev/null)
if [ "$PID" ]; then
echo "killing $PID"
kill -KILL $PID
echo done
fi