ホームページ >運用・保守 >Linuxの運用と保守 >Linuxでプロセスを強制終了する方法
一般:
まず、ps を使用してプロセスを表示します。方法は次のとおりです。
コードをコピーします。コードは次のとおりです。
$ ps -ef
$ ps -ef
……
smx 1822 1 0 11:38 00:00:49 gnome-terminal
smx 1823 1822 0 11: 38 00:00:00 gnome -PTY-HELER
MX 1822 0 11:38 PTS/0 00:00:02 bash
SMX 18271827 1 1 1 11:38? 00:26:28 /usr/lib /firefox-3.6.18/ firefox-bin
smx 1857 1822 0 11:38 pts/1 00:00:00 bash
smx 1880 1619 0 11:38 ? 00:00:00 update-notifier
……
smx 11946 1824 0 21:41 pts/0 00:00:00 ps -ef
Or:
コードをコピー コードは次のとおりです以下:
$ ps -aux
……
smx 1822 0.1 0.8 58484 18152 ? sl 11:38 0:49 gnome-terminal
smx 1823 0.0 0.0 1988 71 2 ? s 11:38 0:00 gnome-pty-helper
smx 1824 0.0 0.1 6820 3776 pts/0 ss 11:38 0:02 bash
smx 1827 4.3 5.8 398196 119568 ? sl 11:38 26:13 /usr/lib/firefox-3.6 .18/firefox-bin
smx 1857 0.0 0.1 6688 3644 pts/1 ss 11:38 0:00 bash
smx 1880 0.0 0.6 41536 12620 ? s 11: 38 0:00 update-notifier
… …
smx 11953 0.0 0.0 2716 1064 pts/0 r 21:42 0:00 ps -aux
Firefox を強制終了したい場合この時点での処理は、ターミナルに次のように入力するだけです:
コードをコピーします コードは次のとおりです:
$ kill -s 9 1827
Among -s 9 は、プロセスに渡されるシグナルが 9、つまり強制的にプロセスをできるだけ早く終了することを指定します。各終端信号とその機能については付録を参照してください。
1827 は、上記の PS によって検出された Firefox の pid です。
簡単ですが問題があります。プロセスが少なければ問題ありませんが、プロセスが多すぎると大変です。ps -ef にしても ps -aux にしても、毎回プロセス情報の大きなリストに表示されるので、プロセスが強制終了されているのを見つけて目がくらみました。
上級記事:
改善点 1:
ps クエリの結果を grep にパイプして、特定の文字列を含むプロセスを検索します。パイプ文字「|」は 2 つのコマンドを区切るために使用されます。パイプ文字の左側のコマンドの出力は、パイプ文字の右側のコマンドの入力として使用されます。
コードをコピーします コードは次のとおりです:
$ ps -ef | grep firefox
smx 1827 1 4 11:38 ? 00:27:33 /usr/lib /firefox- 3.6.18/firefox-bin
smx 12029 1824 0 21:54 pts/0 00:00:00 grep --color=auto firefox
今回はスッキリです。次に
コードをコピーします。コードは次のとおりです:
$kill -s 9 1827
改善 2——pgrep を使用します:
それを見たらすぐに pgrep で最初に思い浮かぶのは何ですか?そうだ、グレップ! pgrep の p は、このコマンドがプロセス クエリ専用の grep であることを示します。
コードをコピーします。コードは次のとおりです。
$ pgrep firefox
1827
何を見たでしょうか?そうです、Firefox の pid です。もう一度入力する必要があります:
$kill -s 9 1827
改善 3 - pidof を使用します:
ピドフを参照してください?そうです、pid of xx、直訳するとxxのpidです。
コードをコピーします。 コードは次のとおりです。
$ pidof firefox-bin
1827
pgrep と比較した場合のわずかな欠点は、pidof であることです。必須 プロセスの完全な名前を指定します。次に決まり文句があります:
コードをコピーします コードは次のとおりです:
$kill -s 9 1827
ps と を使用するかどうか次に、ゆっくりとプロセス pid を見つけるか、 grep を使用して対応する文字列を含むプロセスを見つけるか、pgrep を使用して対応する文字列を含むプロセス pid を直接見つけ、それを手動で入力して kill するのは少し面倒です。もっと便利な方法はありますか?持っている!
改善点 4:
コードをコピーする コードは次のとおりです:
$ps -ef | grep firefox | grep -v grep | Cut -c 9- 15 | xargs kill -s 9
手順:
「grep firefox」の出力は、キーワード「firefox」を含むすべてのプロセスです。
「grep -v grep」は、リストされたプロセスからキーワード「grep」を含むプロセスを削除します。
"cut -c 9-15" は、入力行の 9 番目から 15 番目の文字 (プロセス番号 pid) をインターセプトします。
「xargs kill -s 9」のxargsコマンドは、前回のコマンドの出力結果(pid)を「kill -s 9」コマンドのパラメータとして使用してコマンドを実行します。 「kill -s 9」は指定したプロセスを強制的に強制終了します。
何か文句を言いたくないですか?はい、長すぎます。
改善点 5:
pgrep コマンドと pidof コマンドはご存知でしょうが、なぜそのような長い文字列を入力する必要があるのでしょうか。
コードをコピーします。コードは次のとおりです:
$ pgrep firefox | xargs kill -s 9
改善点 6:
コードをコピーします コードは次のとおりです:
$ ps -ef | grep firefox | awk '{print $2}' | xargs kill -9
kill: no such process
さらに憂鬱なのは、プロセスが見つかって正しく終了したにもかかわらず、実行後にプロセスが見つからないというメッセージが表示されることです。
awk '{print $2}' の機能は、2 番目の列の内容を出力することです。一般的な記事によれば、ps が出力する 2 列目がまさに pid であることがわかります。 kill するプロセスの対応する pid を xargs 経由でパラメータとして渡し、対応するプロセスを kill します。
改善点 7:
PID を渡して kill するために毎回 xargs を呼び出す必要がありますか?答えはノーです:
コードをコピーします コードは次のとおりです:
$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'
改善点 8:
はい、このコマンドはまだ少し長いので、pgrep に置き換えてください。
コードをコピーします。コードは次のとおりです。
$kill -s 9 `pgrep firefox`
改善 9——pkill:
pkill を見て何を思いましたか?そうです、pgrep と kill です。 pkill=pgrep を強制終了します。
コードをコピーします。コードは次のとおりです。
$pkill -9 firefox
説明: 「-9」は、送信された信号が 9 であることを意味します。 pkill と kill この時点での違いは、pkill には「s」が必要なく、終了信号レベルが「-」の直後に続くことです。以前は「-s 9」だとばかり思っていましたが、実行するたびにプロセスの終了に失敗していました。
改善点 10 - killall:
killall と pkill は似ていますが、指定されたプロセス名が不完全な場合、killall はエラーを報告します。 pkill または pgrep は、プロセス名の一部を指定するだけでプロセスを終了できます。
コードをコピーします。コードは次のとおりです。
$killall -9 firefox
以上がLinuxでプロセスを強制終了する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。