システム・プログラム 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/syspro-2004/2004-04-12
/ps-command.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.is.tsukuba.ac.jp/~yas/index-j.html
ps(process)
コマンドは、引数を付けないで実行すると、
プロセス識別子、端末名、
CPU時間、コマンド名を表示する。
ただし、そのままでは、psコマンドを実行した端末と結びつけられているプロ セスしか表示しない。 「-x」オプションを使うと、他の端末に結び付いているプロセスも表示する。---------------------------------------------------------------------- % ps PID TTY TIME CMD 23788 pts/0 00:00:00 tcsh 23819 pts/0 00:00:00 emacs 23822 pts/0 00:00:00 cat 23958 pts/0 00:00:00 ps % ----------------------------------------------------------------------
プロセスが使っているメモリの大きさ (---------------------------------------------------------------------- % ps x PID TTY STAT TIME COMMAND 23788 pts/0 S 0:00 -tcsh 23819 pts/0 T 0:00 emacs -nw 23822 pts/0 T 0:00 cat 23967 pts/1 S 0:00 -tcsh 23996 pts/1 S 0:00 /bin/sh /usr/local/netscape/run-mozilla.sh /usr/local 24000 pts/1 S 0:03 /usr/local/netscape/mozilla-bin 24002 pts/1 S 0:00 /usr/local/netscape/mozilla-bin 24003 pts/1 S 0:00 /usr/local/netscape/mozilla-bin 24004 pts/1 S 0:00 /usr/local/netscape/mozilla-bin 24013 pts/0 R 0:00 ps x % ----------------------------------------------------------------------
SZ
、VSZ
、RSS
)、親プロセスの PID
(PPIID
(Parent PID))優先順位(PRI
(priority))
などの
プロセスの資源と属性を表示する。
Linux の ps は、ps -l と ps l で動きが若干異なる。-l は、System V 風、 l は、BSD 風である。 ps l, ps -l と同様に詳しい表示をする。---------------------------------------------------------------------- % ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 100 S 1013 23788 23786 0 71 0 - 1025 rt_sig pts/0 00:00:00 tcsh 000 T 1013 23819 23788 0 69 0 - 2210 do_sig pts/0 00:00:00 emacs 000 T 1013 23822 23788 0 69 0 - 585 do_sig pts/0 00:00:00 cat 000 R 1013 24029 23788 0 74 0 - 817 - pts/0 00:00:00 ps % ps l F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 100 1013 23788 23786 13 0 4100 2152 rt_sig S pts/0 0:00 -tcsh 000 1013 23819 23788 9 0 8840 4540 do_sig T pts/0 0:00 emacs -nw 000 1013 23822 23788 9 0 2340 552 do_sig T pts/0 0:00 cat 000 1013 24030 23788 12 0 3268 1304 - R pts/0 0:00 ps l % ----------------------------------------------------------------------
全てのプロセスを表示する。System V 風。 端末と結び付いている全てのプロセスを表示する。 x も付けた方がよい。 全てのプロセスを表示する。BSD風。---------------------------------------------------------------------- % ps u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND yas 23788 0.0 0.8 4100 2152 pts/0 S 21:21 0:00 -tcsh yas 23819 0.0 1.7 8840 4540 pts/0 T 21:21 0:00 emacs -nw yas 23822 0.0 0.2 2340 552 pts/0 T 21:21 0:00 cat yas 24047 0.0 0.3 2840 904 pts/0 R 22:04 0:00 ps u % ----------------------------------------------------------------------
a
,u
, x
の組合わせ。全てのプ
ロセスを表示する時に、よく使われる。
プロセスを殺す方法には、次のような方法がある。
^Dを打つと、キーボードから EOF (End Of File) が送られ、cat プ ログラム自ら自発的に終了する(キーボードには、普通のファイルと違い、終 わりとう考え方はないが、OS がそういう仕組みを提供している)。 ^Cを打つと、cat は、自発的に終了するのではなくて、強制終了さ せれている。---------------------------------------------------------------------- % cat Line 1 Line 1 Line 2 Line 2 ^C % ----------------------------------------------------------------------
^C
と同様に
^\
もあるが、
デバッグ用にcore
という名前のファイルができることが異なる。
coreは、実行中のプロセスのメモリの内容をファイルに保存したものである。
注意:以下の実験を行う場合、core を作る実験をする時には、
gnome-terminal ではなく、kterm を実行するとよい。標準の端末
(gnome-terminal) では、^\
では、漢字変換機能の on/off に割り当
てられている。
kterm の中で次の実験を行う。% kterm & %
core を作る実験をする時には、limit コマンドでcoredumpsize を unlimited にする必要がある。標準では、0 kbytes になっている。---------------------------------------------------------------------- % limit coredumpsize unlimited % ls -l core ls: core: そのようなファイルやディレクトリはありません % cat Line 1 Line 1 Line 2 Line 2 ^\ Quit (core dumped) % ls -l core -rw------- 1 yas lab 61440 Apr 27 23:30 core % ----------------------------------------------------------------------
% limit coredumpsize coredumpsize 0 kbytes % limit coredumpsize unlimited % limit coredumpsize coredumpsize unlimited %
core
ファイルはプログラムのデバッグに使える。
どのような関数(この例では番地だけ)が呼び出された結果、プログラムが終了 したかがわかる。---------------------------------------------------------------------- % gdb /bin/cat core GNU gdb Red Hat Linux (5.1-0.71) Copyright 2001 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux"... (no debugging symbols found)... Core was generated by `cat'. Program terminated with signal 3, Quit. Reading symbols from /lib/i686/libc.so.6...done. Loaded symbols for /lib/i686/libc.so.6 Reading symbols from /lib/ld-linux.so.2...done. Loaded symbols for /lib/ld-linux.so.2 #0 0x4010cf74 in __libc_read () from /lib/i686/libc.so.6 (gdb) where #0 0x4010cf74 in __libc_read () from /lib/i686/libc.so.6 #1 0x40162e34 in __DTOR_END__ () from /lib/i686/libc.so.6 #2 0x08048e9c in __fxstat64 () #3 0x08049902 in __fxstat64 () #4 0x40048657 in __libc_start_main (main=0x8049330 <__fxstat64+1756>, argc=1, ubp_av=0xbffff494, init=0x80489ac, fini=0x804a93c <__fxstat64+7400>, rtld_fini=0x4000dcd4 <_dl_fini>, stack_end=0xbffff48c) at ../sysdeps/generic/libc-start.c:129 (gdb) ----------------------------------------------------------------------
普通のデバッグ(自分が作ったプログラム)では、いちいち core を作る必要は ない。単にデバッガの中からプログラムを実行すればよい。強制的に core を 作るのは、普通、既に実行している他人が作ったプログラムを解析する時など に限られる。
^C
や ^\
で死なないプロセス
を殺すには、kill コマンドを使う。
プロセス識別子pidのプロセスを殺す。 オプションなしでkill コマンドを使っても死なないプロセスがある。 その場合はオプション% kill pid
-KILL
をつけてkillコマンドを
実行する。
これでほとんどのプロセスは死ぬ。(OSの都合上(ディスクのI/O完了の 報告など)で、死なないプロセスもある。)% kill -KILL pid