プロセスについて
procfs/sysfs について
procfs
とは/proc
にマウントされる擬似マウントシステムのこと
# これで好きな場所にマウントできる
mount -t proc proc /path/to/your/dir
# /procについて
|-1/,2/, (プロセス関係ディレクトリ)
|-fs/,tty/,sys/ (PIDに対応しないその他ディレクトリ)
|-self,thread-self, (シンボリックリンク)
|-uptime,version, (単体ファイル群)
# /proc/<PID>の構成について
|- fd/,attr/,task/ (ディレクトリ群)
|- exe,cwd (シンボリックリンク群)
|- cmdline,environ,status (単体ファイル群)
# 特殊なシンボリックリンク
# 動作しているプロセスIDがセルフに置き換わる。
/proc/self
プロセスの状態について
linuxのプロセスにはいくつかの状態がある。 psコマンドでS(state)の欄に表示される。
state | 状態 | 備考 |
---|---|---|
R | running | |
S | sleep | 中断可能なスリープ |
D | Disk sleep | 中断不可能なスリープ |
T | stoped | ctr+zのような一時停止中の状態 |
Z | zonbie | ゾンビ状態 |
🚨ゾンビ状態とは親プロセスと子プロセスの間で親が子の終了ステータスを受け取っていない状態で子プロセスが親プロセスに通知するために残った状態のこと。
起動時の動作について
OSは起動時に初期化処理後initプロセスが呼ばれる。
古いディストリビューションでは/sbin/init/init
だったが、
今は/lib/systemd/systemd
になりつつある。
/procフォルダについて
/procフォルダの中には実行中のプロセス毎の情報が格納される。 psやtopコマンドはprocフォルダから情報を取得している。
/porc/<プロセスID>/<いろいろファイルがある>いろいろファイルがある>プロセスID>
あるプロセスの環境変数について確認したいときは
/proc/<プロセスID>/environ
で確認できる。
シグナルについて
kill
コマンドでは通常SIGTERM
というシグナルが送られる。
さらに強いシグナルとしてSIGKILL(無視できない)
がありSIGKILL
>SIGTERM
となっている。
他にはSIGSTOP
,SIGCONT
,SIGHUP
があげられる。
監修的にSIGHUP
は設定の再読み込みに使われる。
実行優先度について
nice値というパラメータで決まる。
-20(高優先度) ~ 10(低優先度)
となっており、nice値が1違うとCPU使用率に10%の差が生まれる。
nice値を変更するには対象のプロセスIDに対して、renice
コマンドを使用して変更を行う。
よりアグレッシブに動作を制御するには
スケジューリングポリシーの変更
がある。
リソースに制限をかける
CPU/IO/メモリに制限をかけることができる。
ulimit
でプロセスやユーザ単位でリミットをかけることができる。
CGroups
でプロセスのグループを作ることでグループに対して制限をつけることができる。