Lから始まるLinux

2章37話
プロセス
2章38話 プロセス操作
もくじ
2章39話
プロセス優先度
プロセス操作
若木 みどり
前回はプロセスを 教えてもらったね!
若木 しげる
今回はそのプロセスの 管理方法を学んでいこう!
シグナル
若木 しげる
プロセスは 「シグナル(signal)」という 信号を送って管理するんだ
若木 みどり
信号でプロセスに 「こうして欲しい」って 伝えるんだね
若木 しげる
よく使うシグナルには こんな種類があるよ
シグナル名 シグナル番号 意味
SIGTERM 15 終了
SIGKILL 9 強制終了
SIGHUP 1 端末の接続切れを通知
SIGINT 2 キーボード割り込み(Ctrl + C)
SIGQUIT 3 キーボード中止(Ctrl + /)
SIGTSTP 20 一時停止(Ctrl + Z)
若木 みどり(驚き)
へぇ! 「Ctrl + C」って 実はシグナルを 送っていたんだ!
kill コマンド
若木 しげる
kill プロセスにシグナルを送信するよ
kill [オプション]... PID...
若木 みどり(驚き)
「kill(殺す)」って名前…ちょっと怖いね
若木 しげる
プロセスを止める用途がほとんどなのでこの名前なんだろうね確かに物騒な名前だけどただプロセスにシグナルを送信しているだけなんだ
若木 しげる
では実際に kill使ってみよう!
若木 しげる
まずは動いているプロセスを用意するよ以下のコマンドを実行しよう
sleep 1000 &
若木 みどり
& はバックグラウンドでコマンドで動かすんだよね実行したよ!
[1] 5717
若木 みどり
ジョブ番号と…他に数字が出てきたね
若木 しげる
この数字「5717」プロセスの PID だよps で確認してみよう!
ps
若木 みどり
うん!
 PID TTY                TIME CMD
5173 09:28 pts/0    00:00:00 -bash
5717 13:00 pts/0    00:00:00 sleep
5720 13:02 pts/0    00:00:00 ps
若木 みどり
確かに sleepPID が 5717 だね!
若木 しげる
では kill を実行してsleep プロセスに止まるようシグナルを送ろう!
kill 5717
若木 みどり
えいっ!
若木 しげる
では終了したかどうかps で確認してみよう
ps
若木 みどり
プロセスが止まるということはその表示が無くなるんだよね?
 PID TTY                TIME CMD
5173 09:28 pts/0    00:00:00 -bash
5723 13:05 pts/0    00:00:00 ps
若木 みどり
sleep が消えているねプロセスが終了したんだ!
若木 しげる
kill で送信するシグナルは指定できるよ指定がなければ「SIGTERM」が送信されるんだ強制終了用の「SIGKILL」を送るには以下のようにするよ
シグナル指定方法kill コマンド
シグナル番号kill -9 5717
シグナル名kill -SIGKILL 5717
短縮シグナル名kill -KILL 5717
若木 みどり
シグナル一覧の確認はどうするのかな?
若木 しげる
kill -l オプションで確認できるよ!
kill -l
ジョブ番号の指定
若木 しげる
PID を扱うコマンドの多くはPID の代わりにジョブ番号を指定できるんだPID の代わりに %ジョブ番号記述するだけだよ
若木 みどり
へぇ…柔軟なんだね!
nohup コマンド
若木 みどり
そういえば前回に出ていたプロセスの親子関係の話が出てこなかったね?
若木 しげる(笑顔)
ちゃんと覚えていてくれたんだね
若木 しげる
親プロセスを終了するとその子プロセスにSIGHUP が送られるんだだから親プロセスが終了すると子プロセスも一緒に終了しちゃうことが多いんだよ
若木 みどり
基本的に親プロセスを止めれば子プロセスも止まってくれるんだね
若木 しげる
複数のプロセスをまとめて止めたいときにこの親子関係が便利な場合があるんだ
若木 みどり
でも…シェルから動かしたコマンドはそのシェルの子プロセスだよね?シェルが終わるとそれらのコマンドも一緒に終わっちゃわないかな?
若木 しげる
基本的にはそうなるよリモート接続からコマンドを実行していたけど接続が切れるとコマンドが終わってしまうのはこういうわけなんだ
若木 みどり
ネットワークが安定していないとコマンドがいつ終了しちゃうかヒヤヒヤするね…
若木 しげる
そういうときに便利なのが nohup だよnohup から実行されたコマンドはSIGHUP を受け取らなくなるんだ
nohup コマンド
若木 みどり
リモート操作をするときはnohup があることを覚えておくね!
まとめ
若木 みどり
今回はプロセスの管理方法を学んだよ!kill で暴走したプログラムを止めたりnohup で長期間動かすタスクを安心して放置できるようにするんだね
若木 しげる
プロセス管理の知識はLinux を扱う上で重要だよ!