プロセス概要

マルチプロセス
TSS
プロセスの概要
システムコール
プロセスの生成
プロセス プロセスの削除 バックグラウンドジョブ
デーモン


マルチプロセス

マルチプロセスとは、複数のプロセスを(ほぼ)同時に実行することです。 CPU がある瞬間に実行できる処理は1つであり、 実際は TSS と呼ばれる仕組みによってマルチプロセスは実現されます。

TSS (Time Sharing System:時分割システム)

CPU を細かく分割した時間単位で、実行するプロセスを切り替えるシステムのことです。 この切り替えが非常に高速に行なわれるので、 人間には複数のプロセスが同時に動作しているかのように見えます。




プロセスの概要

ユーザの入力したコマンドなど何らかのプログラムを実行するには、 メモリに読み込まれなければなりません。 メモリ(及び2次記憶) 上のプログラムコードと実行に必要な種々のデータを合わせてプロセスと言います。 TSS ではプロセスごとに CPU の処理が切り替わるので、 プログラムの最小実行単位とも言えます。 シェルもプロセスとして実行されます。

プログラムを実行するとプロセスが生成され、 プログラムが終了するとプロセスは消滅します。 しかし、 システムの立ち上げから終了まで消滅することなく存在するプロセスもあります。 これをデーモンプロセスといいます。

デーモンプロセスは裏(バックグラウンド)で動作しながら、 システムのサービスを実現します。

また、あるプロセスが新たな別のプロセスを生成する場合があります。 この場合、生成した側を親プロセス、 生成された側を子プロセスと呼びます。 例えば、ユーザがシェルプロンプトからコマンドを入力した場合は、 親プロセスがシェルであり、 子プロセスがコマンドです。




システムコール

ファイルやプリンタなどのシステム資源はカーネルが管理していますが、 これらを利用するプログラム(コマンドを含む)が実行されると、 そのプロセスはシステムコールを発行します。

システムコールはカーネルの資源管理機能を呼び出すためのものであり、 発行されるとカーネルが資源に対する処理を行ないます。




プロセスの生成

新しいプロセスは、fork システム・コールで作成されます。

fork によって生成された新プロセスは、親プロセスと同一のコピーです。 ここから、子プロセス

1) 自分が子供であることを「自覚し」独自の処理を実行するか、または
2) 他のプログラムを読み込んで、そのプログラムに「変身(exec)」するか
のいずれかになります。




プロセス

UNIX 上ではたくさんのプログラムが同時に動いています。 それぞれのプログラムは一つだけで処理を行っているものもありますし、 複数のプログラムによって一つの処理が行われている場合もあります。 このプログラムが動作している最小の単位をプロセスと呼びます。
どんなプロセスが動いているかを確認するには ps コマンドを使います。 各プロセスには プロセス ID という識別番号が割り振られています。
また -e オプションをつけるとシステム全体で動作しているプロセスを確認することができます。 さらに -f オプションをつけると CPU やメモリの占有率なども確認できます。

817ozzy-27 10:23am] ps -ef
     UID   PID  PPID  C    STIME TTY      TIME CMD
    root     0     0  0  12月 10 ?        0:17 sched
    root     1     0  0  12月 10 ?        0:53 /etc/init -r
    root     2     0  0  12月 10 ?        0:11 pageout
    root     3     0  1  12月 10 ?       4482:14 fsflush
    root   591     1  0  12月 10 ?        0:00 /usr/lib/saf/sac -t 300
  nobody   320     1  0  12月 10 ?        0:02 /etc/opt/licenses/lmgrd.ste -c /etc/opt/licenses/licenses_combined
    root   346     1  0  12月 10 ?        0:00 /usr/sbin/cssd
    root    55     1  0  12月 10 ?        0:00 /usr/lib/devfsadm/devfseventd
    root    59     1  0  12月 10 ?        0:00 /usr/lib/devfsadm/devfsadmd
    root   249     1  0  12月 10 ?        0:01 /usr/lib/autofs/automountd
  daemon   232     1  0  12月 10 ?        0:00 /usr/lib/nfs/statd
    root   230     1  0  12月 10 ?        0:02 /usr/sbin/inetd -s
                       :

プロセスの削除

それぞれのプロセスは処理が終了すれば消えますが、 バグのあるプログラムの場合プロセスが終了しないことがあります。 このようなプログラムは直接削除する必要があります。

コマンドラインからプログラムを動作させて場合は [Ctrl]+[C] ([Ctrl]キーを押しながら[C] キーを押す) で終了させることができます。 しかしそれでも終了しないような場合には、 別のターミナル上からプロセスの ID を確認し killコマンドで終了させることができます。

817ozzy-33 10:33am] ps -ef|grep netstat
  pro817  8010  7831  0 10:33:17 pts/11   0:00 netstat -i 5
  pro817  8012  7900  0 10:33:28 pts/16   0:00 grep netstat
817ozzy-34 10:33am] kill 8010
817ozzy-35 10:33am] ps -ef | grep netstat
  pro817  8014  7900  0 10:33:56 pts/16   0:00 grep netstat

消すことができるプロセスは kill コマンドを実行するユーザに権限のあるプロセスだけですが、 誤って別のプロセスを消さないように気をつけなければなりません。 これでも終了しない場合は -KILL オプションをつけて強制終了します。

817ozzy-36 10:33am] ps -ef | grep netstat
  pro817  8015  7831  0 10:36:18 pts/11   0:00 netstat -i 5
  pro817  8017  7900  0 10:36:23 pts/16   0:00 grep netstat
817ozzy-37 10:36am] kill -KILL 8015
817ozzy-38 10:36am] ps -ef | grep netstat
  pro817  8019  7900  0 10:36:35 pts/16   0:00 grep netstat

バックグラウンドジョブ

通常ターミナル上でコマンドなどを実行すると、 その処理が終るまではプロンプトが表示されず、 別の処理が実行できません。

それに対してコマンドを実行するときにコマンドの最後に & を付けると、処理が終らなくてもプロンプトが表示されます。 この場合処理はユーザの見えないところで実行されています。 このように実行される処理をバックグラウンドジョブといいます。
バックグラウンドジョブも ps コマンドで確認できます。 またバックグラウンドジョブは job コマンドで確認できます。




デーモン

プロセスは処理を行う毎に生成され、 処理が終わると終了します。 それに対してシステム上に常駐して動き続けるプロセスがあります。 このようなプロセスをデーモンといいます。

デーモンは常時動いているプロセスですので、 たくさん動いているとシステムは直接操作を行わなくても、 負荷が大きく他の処理に時間がかかることになります。 システムを快適に動かすには、 そのシステムに必要なデーモンだけを動かして余分な仕事を減らす必要があります。

  ここで主なデーモンを簡単に説明します。

automountd (Auto mount/umount daemon)
デバイスのマウント/アンマウントを自動的に行う
cssd
CS の起動と監視を行うデーモン
crond
設定されたスケジュールにしたがってタスクを実行するデーモン
httpd
Web サーバ用デーモン
lpd
ネットワークプリンタを利用するためのデーモン
named
DNS サーバ用
portmap
NFS、 NIS などののネットワーク用
sendmail
メールの配信用デーモン
sshd
SSH (Secure Shell) という暗号処理された通信の接続を行う
syslogd
ログの記録用デーモン
inetd
TCP/IP のポートを監視して要求のあったサービスを起動するデーモン

動いているデーモンの数や種類はシステム構成によって違います。 一般にカーネルの動作を助けるデーモン名は先頭に k が付いています。
これらのデーモンは場合によってはセキュリティホールになるものもありますので、 サーバ用のデーモンなど必要ないものは起動しないようにしましょう。

プロセスに関連してよく使われる主なコマンドには、次のようなものがあります。