2010年11月14日日曜日

今更聞けないUNIXコマンド (3) ジョブとプロセス

UNIXにおけるプロセス, とはOSが管理する実行単位です. それに対して, ジョブは複数のプロセスから成る, シェルが管理するプログラムの実行単位になります.

動作中のジョブは

$ jobs
[1]+  Stopped                 gnuplot

のように確認できます. とはいえ, Stoppedでgnuplotは停止中ですね.
Running : 実行中, Killed: 強制終了, Done: 正常終了, Exit: 異常終了などがあります.

フォアグランドジョブというのが, 現在表で実行中のジョブのことですが, 裏で動作する
バックグランドジョブに切り替えることができます.

$ bg %1
[1]+ gnuplot &

[1]+  Stopped                 gnuplot
とこのようにbg %ジョブ番号でバックグラウンドになります. (%注意)

逆にしたければ

$ fg %1
gnuplot

gnuplot>
でフォアグラウンドにできます. ちなみに引数をいれなければデフォルトでStoppedのジョブが選ばれます.

また, プロセス一覧も見ることができます.

$ ps
  PID TTY           TIME CMD
  478 ttys000    0:00.04 -bash
  995 ttys000    0:00.01 gnuplot
  895 ttys001    0:00.01 -bash
ターミナルを2つ立ち上げていたので, bashが二つプロセスとしてあります.
PIDというのはプロセスを管理するプロセス番号です. 試しに消してみましょう.

$ kill 995
$ ps
  PID TTY           TIME CMD
  478 ttys000    0:00.05 -bash
  895 ttys001    0:00.01 -bash
[1]+  Terminated              gnuplot

とまぁgnuplotが終了されました. これはTERMシグナルというものを送っています.
本気で殺したければkill -KILLとKILLシグナルを送ります.

$ kill -KILL 1041
$ ps
  PID TTY           TIME CMD
  478 ttys000    0:00.07 -bash
  895 ttys001    0:00.01 -bash
[1]+  Killed                  gnuplot

これで無事強制終了されました. なお, Kill PID番号でプロセスを, Kill %ジョブ番号でジョブを殺せます.

シグナルは色々あるらしいので, よくわからんのですが, (kill -lコマンドで確認可能)
とりあえず有名なのはHUPシグナルらしいです.

これはネットワークサービスとして動くデーモンに設定ファイルを再読み込みさせるために使います.
ようするに, 何か設定ファイル変えたときに反映させるためですね.

$ ps -axw
で全ユーザプロセスを省略せずに見ることができます. これでプロセス探して,

$ kill -HUP PID
とすることで, 更新させることができます.

なお, 他にkillallコマンドってのがあって, そっちはコマンド名でシグナルを送るそうです.

$ killall gnuplot
$ ps
  PID TTY           TIME CMD
  478 ttys000    0:00.10 -bash
  895 ttys001    0:00.03 -bash
[1]+  Terminated              gnuplot



ps -axwがでてきたのでついでに書くと, topコマンドを使うと, 色んなシステム状態をリアルタイムで見れます.
アクティビティモニタと同じですね. これも全然知らんかった...


ちなみに, 一緒に書くのがいいかわからんが,

$ df -i -h
Filesystem      Size   Used  Avail Capacity  iused    ifree %iused  Mounted on
/dev/disk0s2   298Gi  100Gi  197Gi    34% 26399483 51659343   34%   /
devfs          107Ki  107Ki    0Bi   100%      610        0  100%   /dev
map -hosts       0Bi    0Bi    0Bi   100%        0        0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%        0        0  100%   /home
でディスク使用状況を見れます. -iってのはi-nodeの使用状況も表示, -hってのは
勝手に人が見やすい単位を表示してくれてます.


まぁしかしコマンドってのは死ぬほどあるな. 必要になれば, あるいは人が使ってみるのを見て覚えるしかない.
正直こういったことは覚えたから偉いって訳でもなく, ただ便利だよね, てだけなので必要に応じることが大事だと思います. (初心者が学ぶ姿勢ではないか…)

0 件のコメント:

コメントを投稿