Solarisのプロセス管理と監視について
OSが起動されて、いろいろなプロセスが実行される。それはコマンドであったり、デーモンであったりする訳であるが、管理者はプロセスを監視することも必要である。時にはプロセスを停止させたり、プロセスを起動させたりするのであるが、Solarisはそのプロセスの管理を自動的にやってくれる。
例えば
findコマンドでファイル検索をしている場合CPU利用率は急激にあがり100%近くまでなるが、放置しておけば他のプロセスは動作できなくなる。SolarisはそのプロセスにCPU処理を実行させる割合も管理している。
(現在のプロセスの表示) # /usr/bin/ps -ef
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 20:51:06 ? 0:03 sched
root 1 0 0 20:51:06 ? 0:11 /etc/init -
root 2 0 0 20:51:06 ? 0:01 pageout
root 3 0 0 20:51:06 ? 245:56 fsflush
root 321 1 0 20:52:23 ? 0:03 /usr/lib/saf/sac -t 300
root 232 231 0 20:52:05 ? 0:16 htt_server -port 9010 -syslog -message_locale C
root 259 1 0 20:52:17 ? 0:03 /usr/local/sbin/sshd
root 118 1 0 20:51:26 ? 0:00 /usr/sbin/rpcbind
nobody 340 334 0 20:52:32 ? 0:16 /usr/local/apache/bin/httpd
root 63 1 0 20:51:19 ? 0:00 /usr/lib/sysevent/syseventd
root 144 1 0 20:51:27 ? 0:45 /usr/lib/autofs/automountd :(省略)
# /usr/ucb/ps -aux
USER PID %CPU %MEM SZ RSS TT S START TIME COMMAND
root 3257 0.6 1.3 1484 1128 pts/8 O 13:53:55 0:00 /usr/ucb/ps -aux
root 3 0.2 0.0 0 0 ? S 20:51:06 245:56 fsflush
root 3256 0.2 1.0 1148 828 pts/8 S 13:53:55 0:00 more
root 3253 0.2 0.3 256 252 pts/8 S 13:53:20 0:00 -sh
root 3250 0.1 1.3 1504 1100 ? S 13:53:19 0:00 in.telnetd
root 175 0.0 1.1 2380 948 ? S 20:51:31 0:01 /usr/sbin/nscd
root 0 0.0 0.0 0 0 ? T 20:51:06 0:02 sched
root 1 0.0 0.1 672 92 ? S 20:51:06 0:11 /etc/init -
root 2 0.0 0.0 0 0 ? S 20:51:06 0:01 pageout
root 63 0.0 0.2 2004 132 ? S 20:51:19 0:00 /usr/lib/sysevent/
root 118 0.0 0.0 2084 ? ? S 20:51:26 0:00 /usr/sbin/rpcbind
root 143 0.0 0.3 2096 272 ? S 20:51:27 0:00 /usr/sbin/inetd -s
(プロセスの強制停止) # kill -9
4667
(プロセスの名前での停止) # pkill telnet
telnetd
|
なお、
killコマンドや
pkillコマンドはプロセスに対し、シグナルというものを送りつける。シグナルには以下の種類があり、デフォルトは15番のSIGTERMを発行する。つまり「
#
kill 4018」は「
# kill -15 4018」と同じである。良く使うのは15番が有効にならない場合で、「
# kill -9
4018」の強制終了を使用する。
NAME |
Value |
Default |
SIGHUP SIGINT SIGQUIT SIGILL SIGTRAP SIGABRT SIGEMT SIGFPE
SIGKILL SIGBUS SIGSEGV SIGSYS SIGPIPE SIGALRM
SIGTERM SIGUSR1 SIGUSR2 SIGCHLD SIGPWR SIGWINCH SIGURG SIGPOLL SIGSTOP SIGTSTP SIGCONT SIGTTIN SIGTTOU SIGVTALRM SIGPROF SIGXCPU SIGXFSZ SIGWAITING SIGLWP SIGFREEZE SIGTHAW SIGCANCEL SIGRTMIN (SIGRTMIN+1) (SIGRTMAX-1) SIGRTMAX |
1 2 3 4 5 6 7 8
9 10 11 12 13 14
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 * * * * |
Exit Hangup (see termio(7I)) Exit Interrupt (see termio(7I)) Core Quit
(see termio(7I)) Core Illegal Instruction Core Trace or Breakpoint
Trap Core Abort Core Emulation Trap Core Arithmetic Exception
Exit Killed Core Bus Error Core Segmentation
Fault Core Bad System Call Exit Broken Pipe Exit Alarm Clock
Exit Terminated Exit User Signal 1 Exit User Signal
2 Ignore Child Status Changed Ignore Power Fail or Restart Ignore
Window Size Change Ignore Urgent Socket Condition Exit Pollable Event (see
streamio(7I)) Stop Stopped (signal) Stop Stopped (user) (see
termio(7I)) Ignore Continued Stop Stopped (tty input) (see
termio(7I)) Stop Stopped (tty output) (see termio(7I)) Exit Virtual Timer
Expired Exit Profiling Timer Expired Core CPU time limit exceeded (see
getrlimit(2)) Core File size limit exceeded (see getrlimit(2)) Ignore
Concurrency signal reserved by threads library Ignore Inter-LWP signal
reserved by threads library Ignore Check point Freeze Ignore Check point
Thaw Ignore Cancellation signal reserved by threads library Exit First
real time signal Exit Second real time signal Exit Second-to-last real
time signal Exit Last real time signal |
さて、
psコマンドでプロセスの状態を確認できた訳であるが、詳細な情報は、実は/procディレクトリに格納されている。プロセスIDも当然というか、
/proc配下にはプロセスID(10進数)のディレクトリが作成されている。そのディレクトリはプロセスを起動したユーザが、所有者になる。他にもプロセスの詳細な情報が記述されている。
# ps -ef | grep 6111 root 6111 194 0 15:17:24 ? 0:00
in.telnetd
# ls -la /proc | grep 6111 dr-x--x--x 5 root root
736 6月 11日 15:17 6111
# ls -F /proc/6111 as ctl lpsinfo lwp/
pagedata root@ usage auxv cwd@ lstatus map psinfo sigact
watch cred fd/ lusage object/ rmap status
xmap |