コース目次 / 第1章

ps と /proc で、動いているプロセスを見る

sleepするだけのプログラムをバックグラウンドで起動し、psとProc/PID/statusで基本情報(PID・PPID・状態・メモリ使用量)を確認します。

第1章 / 全5章目安 約10分この章のゴール: psと/proc/PID/statusで、プロセスの基本情報を読み取れるようになる

観察対象を、起動する

sleepy.c として保存します。30秒間眠るだけの、観察用の単純なプログラムです。

#include <stdio.h>
#include <unistd.h>

int main(void) {
    printf("PID: %d\n", getpid());
    fflush(stdout);
    sleep(30);
    return 0;
}
gcc -O0 -o sleepy sleepy.c
./sleepy &
PID: 14341

&でバックグラウンド起動しました。表示されたPID(プロセスID)を、以降のコマンドで使います(あなたの環境では別の数字になります)。

psで、見る

ps -p 14341 -o pid,ppid,stat,cmd
  PID  PPID STAT CMD
14341 13978 S    ./sleepy

PID — このプロセスの番号。
PPID — 親プロセスのPID(このシェルのPID)。sleepyは、あなたのシェルからforkされて生まれました。
STAT — 状態。Sは「割り込み可能なスリープ」——sleep(30)の中で待っている状態です。

/procで、同じ情報をファイルとして読む

Linuxは、動いているすべてのプロセスの情報を、/proc/<PID>/という擬似ファイルシステムとして公開しています。psのようなコマンドも、実は内部でこのファイルを読んでいます。

grep -E "^(Name|State|Pid|PPid|VmSize|VmRSS|Threads):" /proc/14341/status
Name:	sleepy
State:	S (sleeping)
Pid:	14341
PPid:	13978
VmSize:	    2692 kB
VmRSS:	    1744 kB
Threads:	1

psで見たのと同じ情報(名前・状態・PID・PPID)に加えて、VmSize(割り当てた仮想メモリの総量)とVmRSS(実際に物理メモリに載っている量)まで見えました。/procは、psやtopより詳しい情報を、直接テキストとして読めます。

こうなっていればOK

卒業まであと3章です。

この章はまだ完了していません。