web-dev-qa-db-ja.com

PIDではなく名前でプロセスを強制終了する方法を教えてください。

Firefoxを起動しようとすると、「Firefoxプロセスはすでに実行中です」と表示されることがあります。だから私はこれをしなければならない:

jeremy@jeremy-desktop:~$ ps aux | grep firefox
jeremy    7451 25.0 27.4 170536 65680 ?        Sl   22:39   1:18 /usr/lib/firefox-3.0.1/firefox
jeremy    7578  0.0  0.3   3004   768 pts/0    S+   22:44   0:00 grep firefox
jeremy@jeremy-desktop:~$ kill 7451

私が欲しいのは私のためにすべてをするだろうコマンドです。それは入力文字列とそれに対するgrepをプロセスのリストの中で(あるいは何でも)受け取りそして出力の中のすべてのプロセスを殺します。

jeremy@jeremy-desktop:~$ killbyname firefox

私はそれをPHPでやってみましたが、exec('ps aux')はPHPスクリプト自身の中でexec()で実行されたプロセスのみを表示しているように見えます。

300
Jeremy Ruten
pkill firefox

より多くの情報: http://linux.about.com/library/cmd/blcmdl1_pkill.htm

448
shoosh

また使用することができます:

pkill -f "Process name"

私にとってそれは完璧に動作します、それは私が探していたものでした。私の場合はフラグなしでpkillは名前で動作しませんでした。

-fが設定されると、完全なコマンドラインがパターンマッチングに使用されます。

85
Victor

killall <name> を使ってnameでプロセスを強制終了できます

killallは、指定されたコマンドのいずれかを実行しているすべてのプロセスにシグナルを送信します。シグナル名が指定されていない場合は、SIGTERMが送信されます。

シグナルは名前(例: - HUPまたは - SIGHUP)または番号(例:のどちらでも指定できます。 )-1)またはオプション - s

コマンド名が正規表現ではなく(option - r)、スラッシュ(/)が含まれている場合、そのファイルを実行しているプロセスは、名前に関係なく強制終了されます。

しかし、ps auxのプロセスが見当たらない場合は、おそらくそれを強制終了する権利がないでしょう。

62
Andre Bossard

もう少し長い選択肢:

kill `pidof firefox`
41
Walter

最も簡単な方法は、まず正しいプロセスIDを取得していることを確認することです。

pgrep -f [part_of_a_command]

結果が予想どおりの場合一緒に行く:

pkill -f [part_of_a_command]
17
Tahsin Turkoz

奇妙な、しかし私はこのような解決策を見たことがない:

kill -9 `pidof firefox`

次のように複数のプロセス(複数のpid)を殺すこともできます。

kill -9 `pgrep firefox`

単一行の出力があるのでpidofが好きです。

> pgrep firefox
6316
6565
> pidof firefox
6565 6316
15
prosti

Macでは、私はpgrepとpkillを見つけることができず、どちらもkillallが動作していなかったので、単純なワンライナースクリプトを書きました: -

export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid

これを行うより簡単な方法があるならば、それを共有してください。

11
Dhiraj

#killallコマンドを使用する:

#killall -9 <processname>
9
user2396265

スタートアップパスにsnippetを持つすべてのプロセスを終了します。/ directory /をスニペットとして置くことで、あるディレクトリから起動したすべてのアプリケーションを終了できます。これは、同じアプリケーションディレクトリから同じアプリケーションに対して複数のコンポーネントを起動するときに非常に便利です。

ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill

*可能であれば、Pgrepを優先します。

8

Grepで殺すには:

kill -9 `pgrep myprocess`
6
edW

より正確になるでしょう:

export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid
5
Chadiso

私は通常killallコマンド を使います。詳細はこちら をご覧ください。

4
Bittercoder

私は自分自身に同じ質問をしていましたが、現在の答えの問題はそれらが殺されるプロセスを安全にチェックしてくださいではないということです。 いくつかのプロセスがパターンに一致.

免責事項として、私はsh proではありませんし、確かに改善の余地があります。

だから私は少しshスクリプトを書きました:

#!/bin/sh

killables=$(ps aux | grep $1 | grep -v mykill | grep -v grep)
if [ ! "${killables}" = "" ]
then
  echo "You are going to kill some process:"
  echo "${killables}"
else
  echo "No process with the pattern $1 found."
  return
fi
echo -n "Is it ok?(Y/N)"
read input
if [ "$input" = "Y" ]
then
  for pid in $(echo "${killables}" | awk '{print $2}')
  do
    echo killing $pid "..."
    kill $pid 
    echo $pid killed
  done
fi
3
Fab

デフォルトのkillコマンドは、PIDの代わりにコマンド名を受け入れます。 kill(1) を参照してください。頻繁に発生する問題は、bashが、kill %1のようなジョブ番号を受け付ける独自のkillを提供しますが、コマンド名を提供しないことです。これはデフォルトのコマンドを妨げます。前者の機能が後者よりもあなたにとって有用であるならば、あなたは以下を呼び出すことによってbashバージョンを無効にすることができます。

enable -n kill

詳しくは、 bash(1)のkillおよびenableの項目を参照してください

2
The Vee

GNOMEを実行している場合は、Windowsの場合と同様に、システムモニタ([システム] - > [管理] - > [システムモニタ])を使用してプロセスを強制終了できます。 KDEにも似たようなものがあります。

1
Bernard
ps aux | grep processname | cut -d' ' -f7 | xargs kill -9 $
0
query_port

awk oneliner。ps出力のヘッダーを解析するため、列番号(列名)を気にする必要はありません。正規表現をサポートします。たとえば、すべてのプロセスを強制終了するには、実行可能ファイル名(パスなし)にWord "firefox"が含まれます

ps -fe | awk 'NR==1{for (i=1; i<=NF; i++) {if ($i=="COMMAND") Ncmd=i; else if ($i=="PID") Npid=i} if (!Ncmd || !Npid) {print "wrong or no header" > "/dev/stderr"; exit} }$Ncmd~"/"name"$"{print "killing "$Ncmd" with PID " $Npid; system("kill "$Npid)}' name=.*firefox.*
0
Andrey Bochkov

kill -9 $(ps aux | grep -e myprocessname | awk '{print $ 2}')

0
Nived Thanima