読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】止まらんプロセスはとりあえず kill -9 でええの?シグナルの基本【LPICレベル1】

23レスカテゴリ:Linux
1: 名無しさん

プロセスが固まったら、いつも kill -9 PID で止めてる
普通の kill と何が違うん

2: 名無しさん

>>1
kill はプロセスを殺すコマンドというより、シグナル(合図)を送るコマンド
番号を指定しないと SIGTERM( 番)、-9 は SIGKILL( 番)を送る

3: 名無しさん

>>2
他にどんなシグナルがあるん

4: 名無しさん

>>3
よく出るのはこの4つ。kill -l で一覧が出る
番 SIGHUP(端末の切断)、 番 SIGINT(Ctrl+C)、 番 SIGKILL(強制終了)、 番 SIGTERM(終了の依頼)

5: 名無しさん

どうせ終わらせるんやから、最初から -9 でよくない?

6: 名無しさん

>>5
SIGTERM はプロセスが受け取って、一時ファイルを消したり、書きかけのデータを保存したりしてから終われる
SIGKILL はカーネルがその場で終わらせる。プロセス側では受け取ることも無視することもできないから、後始末なしで終わる
まず普通の kill、それで終わらんときに -9

7: 名無しさん

>>6
受け取るってどういうこと

8: 名無しさん

>>7
シェルスクリプトなら trap で書ける
trap 'echo caught TERM; exit 3' TERM を入れたスクリプトに kill を送ると、caught TERM と出して終了ステータス で終わった
同じスクリプトに kill -9 を送ると、trap は動かずにその場で終わった

9: 名無しさん

>>8
kill -9 のあとに終了ステータスを見たら やったんやけど、これ何

10: 名無しさん

>>9
シグナルで終わったプロセスの終了ステータスは、シェルでは にシグナル番号を足した値になる

Ctrl+C( 番)で止めたら

11: 名無しさん

PID はどうやって調べるん

12: 名無しさん

>>11
ps aux や ps -ef で一覧を見るか、名前から探すなら pgrep sleep のようにする
名前を指定して直接送るなら pkill や killall。ただ、名前が似た別のプロセスまで巻き込むことがあるから、先に pgrep で確かめる

13: 名無しさん

Ctrl+Z で止めたやつはどうなってるん

14: 名無しさん

>>13
Ctrl+Z は SIGTSTP を送って一時停止させるだけで、終わってはいない。ps の STAT 列が T になる
fg で手前に戻して再開、bg でバックグラウンドで再開。再開のときは SIGCONT が送られてる

15: 名無しさん

>>14
SIGSTOP っていうのもあるやろ。Ctrl+Z と同じちゃうの

16: 名無しさん

>>15
止めるのは同じやけど、SIGTSTP はプロセスが受け取って無視することもできる
SIGSTOP は SIGKILL と同じく、受け取ることも無視することもできない

17: 名無しさん

SIGHUP はいつ使うん

18: 名無しさん

>>17
端末を閉じたりログアウトしたりすると、そこから起動したプロセスに送られて、ふつうは終わる
ログアウトしても動かし続けたいなら nohup コマンド &
常駐するサーバープログラムでは、HUP を受けたら設定ファイルを読み直す、という作りのものが多い

19: 名無しさん

kill -9 しても消えないプロセスがあった

20: 名無しさん

>>19
ps の STAT が Z ならゾンビ。もう終わってて、親プロセスが終了を受け取るのを待ってるだけの状態
すでに終わってるからシグナルは効かない。親プロセスが受け取るか、親が終わると片付く
STAT が D(ディスクなどの入出力待ち)のときも、待ちが終わるまで -9 がすぐには効かないことがある

21: 名無しさん

優先度を下げて動かす nice は?

22: 名無しさん

>>21
nice 値は から で、初期値は 。大きいほど優先度が低い
nice -n 10 コマンド で低めの優先度で起動して、動いてるものは renice で変える
一般ユーザーは値を大きくする(優先度を下げる)方向にしか変えられない。nice -n -5 は Permission denied になる

23: 名無しさん

kill は合図を送るだけ。まず TERM で後始末させて、ダメなときだけ KILL
それでも消えんときは STAT を見る。ゾンビなら親のほうを見る

管理人のひとこと