2013-03-16 11 views
47

特定のユーザーのすべてのプロセスを確実に終了する方法はありますか?そのユーザーの不正なプロセスが最初に殺害プロセスを殺さない限り、そのユーザーが動作するように、kill(-1, SIGKILL)が働きます。私が今までに見つけた最高のものは、そのユーザーのためにsystem("ps -u")をループして、その方法でプロセスを終了させることですが、それは本当にハックして非効率なようです。与えられたユーザーのすべてのプロセスを終了させる

編集:明確にするために、私は具体的にはPOSIX互換のソリューションを求めています。何らかの理由で、私はposixという質問にタグを付けることで、それをタイトルに入れると思った。

+3

それはここにすべてのソリューションは、(一般的にkill' 'の場合のように)[TOCTOU](HTTPSを持っていることは注目に値します:// CWEを競合状態:プロセスを特定してそれらを強制終了して終了させるプロセス間でプロセスが停止し、PIDがリサイクルされる可能性があります。または、そのユーザーが所有する新しいプロセスが、あなたには分かりません。 – pilcrow

答えて

64

だけでは(一時的に)PUが私のユーザーIDをある

killall -u pu -m . 

と私のMacBookを殺しました。コマンドの最後に点を見る。

また、これを行う1つのライナーです。ここ

pkill -u pu 

または

ps -o pid -u pu | xargs kill -1 
+0

ありがとう、AFAICT killallとpkillはPOSIXの一部ではありません。私の質問に編集する) –

+0

私はPOSIXでOKを追加しましたか? – uselpa

+0

ああ、いいですね! POSIXで定義されているライブラリ関数からは不可能なように見えるので、これを受け入れます。 –

1

/proc仮想ファイルシステムの反復処理はどうですか? http://linux.die.net/man/5/proc

+0

ありがとう、しかし/ procはPOSIXの一部ではありません。(私の質問に編集を参照してください) –

+0

@Shea Levy問題はありません。 "ps -u"はPOSIX自体ではなく、もっと* nix指向です。 –

+0

ええと、私のhttp://pubs.opengroup.org/onlinepubs/9699919799/utilities/ps.htmlの読んだところでは、それはそうだ... –

27

を試してみてください、ちょうどあなたが物事を殺すためにしたいユーザ名とユーザ名を交換してください。そこに根を置くことさえ考えないでください!

pkill -9 -u `id -u username` 

注:あなたはnice-9を削除したいと思っていますが、すべての種類のプロセスを強制終了しません。

5

Debian LINUXでは、私はps -o pid= -u username | xargs sudo kill -9を使用します。

-o pid=では、psヘッダーが抑制され、出力はpidリストのみになります。私が知る限り、Debian shellはPOSIXに準拠しています。

0

次は、このユーザーが作成したすべてのプロセスを殺す:

kill -9 -1 
+1

POSIXによると、kill -9 -1はkill(-1、SIGKILL)と解釈されます。"pidが-1の場合、プロセスがそのシグナルを送信する許可を持つすべてのプロセス(指定されていないシステムプロセスのセットを除く)にsigを送信します。"だから標準(と、FWIW、macOS上で)これはkillプロセス自体も殺します。 –

関連する問題