killとは穏やかではありませんが、今回killするのはプロセスさんです。
プロセスさんはkillされ慣れてるのでさほど心配する必要はありませんよ。
サイコパスみたいな文章となりましたが、killコマンドとジョブをフォアグラウンドで実行したりバックグラウンドで実行する方法をEnvaderさんで学んでいきます。
前回のあらすじ
前回学んだプロセスのお話の続きとなります。
killコマンドとはなんぞや?
プロセスにシグナルを送るコマンドです。プロセスを強制終了させるのはオプション機能の一つに過ぎません。
killコマンドによるプロセス管理
とはいえまずは主な使い方であるプロセスを強制終了させる使い方をやってみます。
環境はEnvaderを利用しています。
- まずはpsコマンドでプロセスのIDを
ps aux
で確認します。 - 狙いを定めてkillなのですが、シグナル番号も必要です。とりあえず強制終了するとして
-9
を指定しましょう
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 17944 2700 ? Ss 13:25 0:00 /bin/bash /init.sh
root 12 0.0 0.0 69956 3060 ? Ss 13:25 0:00 /usr/sbin/sshd
envader 13 0.0 0.0 702216 1084 ? Sl 13:25 0:00 /tmp/malware
kill -9 13
引用:プロセス管理 ー 2
malwareってなんだよ!そりゃとりあえずkillするよ!
killシグナル
killで送れるシグナル一覧を見るにはkill -l
です。
kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
めちゃくちゃありますね。覚えられないので以下くらいをチェックしときましょう。
Signal Name | No | mean |
---|---|---|
HUP | 1 | ハングアップ、設定の再読み込み |
INT | 2 | 割り込み、一時停止 |
KILL | 9 | 強制終了 |
TERM | 15 | 終了 |
TSTP | 19 | サスペンド(スタンバイ) |
※KILLシグナル(9)でDBやLDAPサーバープロセスを強制終了するとデータ破損する可能性。
とりあえずkillコマンドとシグナルについてはこんな感じです。
ジョブの実行場所切り替え
おもむろにコマンドを実行したところ結構時間のかかる処理で後続のコマンド打てなくなったことって無いですか?
私はしょっちゅうあります。
そんなときにジョブを一時停止してバックグラウンドで実行するといったことができます。
ジョブってのは
プログラムの実行単位のことです。
ターミナルでコマンド実行したときはフォアグラウンドジョブになります。
一方でユーザー操作とは関係なく背後で実行することをバックグラウンドジョブといいます。
バックグラウンドでジョブを実行するには、コマンドの後に&
をつけます。
フォアグラウンド・バックグラウンドの切り替え
まずは実行中のジョブをjobs
コマンドで表示します。
フォアグラウンドで実行しているジョブをバックグラウンドにするには
bg %ジョブID
バックグラウンドで実行しているジョブをフォアグラウンドにするには
fg %ジョブID
※実行中ジョブを一時停止するにはctrl+z
つまりうっかりフォアグラウンドで実行したジョブを一旦停止しbgでバックグラウンド実行に切り替えることができます。
学んだこと
- killコマンドでプロセスの終了することを学びました
- ジョブを中断して邪魔にならないようバックグラウンドで実行する方法などを学びました。
これでプロセスやジョブの生殺与奪の権を握ったといえます。
冨岡先輩ブチギレ案件です。
コメント