web-dev-qa-db-ja.com

名前にスペースがあるプロセスを強制終了するにはどうすればよいですか?

Name = exampleのプロセスは、次の方法で強制終了できます。

killall-9の例

スペースを含む次のコマンドの複数のインスタンスを強制終了するにはどうすればよいですか?

"valgrind --tool = lackey ./testcases/kernel/syscalls/waitpid/waitpid03"

次のコマンドはvalgrind --tool = lackey ./testcases/kernel/syscalls/waitpid/waitpid03を返します:そのようなファイルまたはディレクトリはありません ==

killall -9 "valgrind --tool = lackey ./testcases/kernel/syscalls/waitpid/waitpid03"

8
Usman

killall valgrindは、引数に関係なく、すべてのvalgrindプロセスを強制終了します。コマンドラインが正確にvalgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03であるプロセスのみを強制終了する場合は、pkillを使用できます。

pkill -xf 'valgrind --tool=lackey ./testcases/kernel/syscalls/waitpid/waitpid03'

killallと同様に、pkillはすべての非組み込み(および一部の組み込み)Linuxインストールにあり、より強力で、多くの場合、より信頼性があります(ただし、何らかの理由であまり知られていません)。コンパニオンユーティリティpgrepは、強制終了する代わりにPIDを一覧表示することを除いて同じです。

興味があるかもしれない別のユーティリティはfuserです:fuser testcases/kernel/syscalls/waitpid/waitpid03は指定されたファイルが開いているプロセスをリストし、fuser -kはこれらのプロセスにシグナルを送信します。シグナルを送信しようとしない場合、lsoffuserのより強力な代替手段です(より多くのものを表示し、より多くのフィルターを備えています)。

killallに完全なコマンドラインを指定する必要はありません。 killall valgrindあなたの場合は十分でしょう。

~$ Perl -e 'sleep 10000' &
[1] 3586
~$ ps ax | grep Perl
 3586 pts/3    S      0:00 Perl -e sleep 10000
 3588 pts/3    S+     0:00 grep Perl
~$ killall Perl
[1]+  Terminated              Perl -e 'sleep 10000'
~$ 
1
Dave Sherohman

他の優れたソリューションと同様に、いつでもhtopをインストールしてから、実行中のプロセスのリストをスクロールしてF9(kill)キーを使用することで、必要なものを強制終了できます。わかりました、それは難しいコマンドラインのものではありませんが、それは機能します!

1
Linker3000

killall valgrind実際のvalgrind実行可能ファイルには別の名前があるため、通常は機能しません。この名前は、使用しているvalgrindツールに応じて、memcheck-AMD64-linuxなどになります。 psがプロセス名として報告するのは実行可能ファイル名ではなく、コマンドラインの最初のエントリです。これは混乱を引き起こします。これをpsmiscに報告しました: https://github.com/acg/psmisc/issues/1

0