web-dev-qa-db-ja.com

シリアルポートを使用しているプロセスを見つけて強制終了します

デバイスが接続されているそれぞれに複数のシリアルポートがあります。それらは/dev/ttyUSB*としてリストされます。ここで、Kermitスクリプトを実行する前に、pythonスクリプトを使用して、他のプロセスがこれらを使用していないことを確認する必要があります(アクセスが拒否されないようにするため)login_initpsおよび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

プロセスのpidsは問題なく取得できましたが、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

これは正しい唯一の方法ですか、それとももっと良い方法がありますか?

4
skrowten_hermit

killallは、プログラム名の部分文字列を引数として期待します。プロセスIDでプロセスを強制終了するには、killを使用します。

コマンドfuserを使用すると、ファイルを開いているすべてのプロセスを直接強制終了できます。

fuser -k /dev/ttyUSB9

すでにプロセスIDを持っているので、killを使用できます。

kill -TERM 13395 14410 

SIGTERM-ボタンを押す前に、まず通常のSIGKILLを送信することをお勧めします。)

killallコマンドはLinuxシステムで使用されます プロセスはnameで強制終了します pkill 。ただし、Solarisなどの他のシステムでは、 killall killseverything (シャットダウン手順の一部として)、これを使用する場合は覚えておくとよいでしょう。

1
ilkkachu

以下のコマンドを使用してpidをkillします

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

1
Modassir Haider