linux殺しプロセス

3443 ワード

1篇を転載して、最も原始的な出所はすでに試験することができなくて、許しを望みます!
一般編:
まず、psでプロセスを表示します.方法は次のとおりです.
$ ps -ef
…… smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal smx 1823 1822 0 11:38 ? 00:00:00 gnome-pty-helper smx 1824 1822 0 11:38 pts/0 00:00:02 bash smx 1827 1 4 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
または、
$ ps -aux
……
smx 1822 0.1 0.8 58484 18152 ? Sl 11:38 0:49 gnome-terminal smx 1823 0.0 0.0 1988 712 ? 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
このとき、火狐を殺したいプロセスは端末に入力されます.
$ kill -s 9 1827
ここで、−s 9は、プロセスに伝達される信号が9である、すなわち、プロセスを強制的に、できるだけ早く終了することを制定する.各終了信号とその役割は付録を参照してください.
1827は上psで調べた火狐の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を見るとまず何を思い浮かべますか?そう、grep!pgrepのpは,このコマンドがプロセスクエリに特化したgrepであることを示している.
$ pgrep firefox 1827
何が見えた?そう、火狐のPID、次はまたタイプします.
$kill -s 9 1827
改善3-pidofの使用:
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の2つの命令を知っていて、どうしてそんなに長い列を打つのですか!
$ 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列目のコンテンツを印刷(print)することである.通常編によれば,ps出力の2列目がちょうどPIDであることが分かる.プロセスに対応するPIDをxargsを介してkillにパラメータとして渡し,対応するプロセスを殺す.
改善7:
毎回xargsを呼び出してkillにPIDを渡すのか?答えは否定的です.
$kill -s 9 ps -aux | grep firefox | awk '{print $2}'
改善8:
そう、命令はまだ少し長いので、pgrepに変えます.
$kill -s 9 pgrep firefox
改善9-pkill:
pkillを見て何を考えたの?そうpgrepとkill!pkill=pgrep+kill.
$pkill -9 firefox
説明:「-9」は送信された信号が9であり、pkillとkillの違いは、pkillが「s」を必要とせず、終了信号レベルが「-」の後ろに直接付いていることである.これまでは「-s 9」と思っていたが、実行するたびにプロセスを終了することはできなかった.
改善10-killall:
killallとpkillは似ていますが、与えられたプロセス名が不完全であればkillallはエラーを報告します.pkillまたはpgrepは、プロセス名の一部を与えるだけでプロセスを終了することができる.
$killall -9 firefox