在Linux系统中:触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID ,称为 PID,同时依据启发这个程序的使用者与相关属性关系,给予这个 PID 一组有效的权限配置。而我们可以通过ps,top, pstree三个命令来观察程序。
- 仅观察自己的 bash 相关程序: ps -l
[root@192 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 3087 3083 0 80 0 - 27091 do_wai pts/0 00:00:00 bash
4 R 0 3113 3087 0 80 0 - 27038 - pts/0 00:00:00 ps
-
F:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:
- 若为 4 表示此程序的权限为 root ;
- 若为 1 则表示此子程序仅进行[复制(fork)而没有实际运行(exec)]
-
S:代表这个程序的状态 (STAT),主要的状态有:
- R (Running):该程序正在运行中;
- S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
- D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>列印)
- T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
- Z (Zombie):僵尸状态,程序已经终止但却无法被移除至内存外。
UID/PID/PPID:代表『此程序被该 UID 所拥有/程序的 PID 号码/此程序的父程序 PID 号码』
C:代表 CPU 使用率,单位为百分比;
PRI/NI:Priority/Nice 的缩写,代表此程序被 CPU 所运行的优先顺序,数值越小代表该程序越快被 CPU 运行。
ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,指出该程序在内存的哪个部分,如果是个 running 的程序,一般就会显示『 - 』 / SZ 代表此程序用掉多少内存 / WCHAN 表示目前程序是否运行中,同样的, 若为 - 表示正在运行中。
TTY:登陆者的终端机位置,若为远程登陆则使用动态终端介面 (pts/n);
TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运行的时间,而不是系统时间;
CMD:就是 command 的缩写,造成此程序的触发程序之命令为何。
观察系统所有程序: ps aux
[root@192 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19368 1448 ? Ss 20:30 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 20:30 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 20:30 0:00 [migration/0]
...
liumi8 2736 0.0 0.1 108364 1700 pts/1 Ss+ 21:05 0:00 /bin/bash
root 3083 0.0 0.4 102104 4152 ? Ss 22:39 0:00 sshd: root@pts/0
root 3087 0.0 0.1 108364 1784 pts/0 Ss 22:39 0:00 -bash
root 3114 0.0 0.1 110256 1148 pts/0 R+ 22:45 0:00 ps aux
USER:该 process 属于哪个使用者帐号的?
PID :该 process 的程序识别码。
%CPU:该 process 使用掉的 CPU 资源百分比;
%MEM:该 process 所占用的实体内存百分比;
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运行,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登陆者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,状态显示与 ps -l 的 S 旗标相同 (R/S/T/Z)
START:该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 运行的时间。
COMMAND:该程序的实际命令为何?
找出与 cron 与 syslog 这两个服务有关的 PID 号码? 可以使用我们之前提到过的grep命令
[root@192 ~]# ps aux | egrep '(cron|syslog)'
root 1446 0.0 0.1 249156 1588 ? Sl 20:31 0:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
root 1552 0.0 0.0 8368 388 ? Ss 20:31 0:00 /usr/sbin/fcoemon --syslog
root 1967 0.0 0.1 116888 1396 ? Ss 20:31 0:01 crond
liumi8 2456 0.0 0.4 450044 4676 ? S
- top:动态观察程序的变化, 相对于ps获取某一个时间点的程序状态,top则可以持续的观察程序的运行状态,如下每两秒刷新一下程序状态
[root@192 ~]# top -d 2
top - 22:57:58 up 2:27, 3 users, load average: 0.00, 0.00, 0.0
Tasks: 164 total, 1 running, 163 sleeping, 0 stopped, 0 zombi
Cpu(s): 0.5%us, 0.5%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%s
Mem: 1004112k total, 929844k used, 74268k free, 61260k buffer
Swap: 2031612k total, 0k used, 2031612k free, 558660k cache
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3083 root 20 0 99.7m 4164 3168 S 0.5 0.4 0:00.32 sshd
3123 root 20 0 15036 1308 948 R 0.5 0.1 0:00.19 top
1 root 20 0 19368 1448 1128 S 0.0 0.1 0:01.46 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
- 第一行(top...):这一行显示的资讯分别为:
- 目前的时间 :17:03:09 ;
- 启动到目前为止所经过的时间: up 7days, 16:16 ;
- 已经登陆系统的使用者人数:1 user;
- 系统在 1, 5, 15 分钟的平均工作负载。代表的是 1, 5, 15 分钟,系统平均要负责运行几个程序(工作)的意思。 越小代表系统越闲置,若高於 1 得要注意你的系统程序是否太过繁复了!
- 第二行(Tasks...):显示的是目前程序的总量与个别程序在什么状态(running, sleeping, stopped, zombie)。 比较需要注意的是最后的 zombie 那个数值,如果不是 0 !好好看看到底是那个 process 变成僵尸了吧?
- 第三行(Cpus...):显示的是 CPU 的整体负载,需要特别注意的是 %wa ,那个项目代表的是 I/O wait, 通常你的系统会变慢都是 I/O 产生的问题比较大!因此这里得要注意这个项目耗用 CPU 的资源喔! 另外,如果是多核心的设备,可以按下数字键『1』来切换成不同 CPU 的负载率。
- 第四行与第五行:表示目前的实体内存与虚拟内存 (Mem/Swap) 的使用情况。 再次重申,要注意的是 swap 的使用量要尽量的少!如果 swap 被用的很大量,表示系统的实体内存实在不足!
- 第六行:这个是当在 top 程序当中输入命令时,显示状态的地方。
至於 top 下半部分的画面,则是每个 process 使用的资源情况。比较需要注意的是: - PID :每个 process 的 ID;
- USER:该 process 所属的使用者;
- PR :Priority 的简写,程序的优先运行顺序,越小越早被运行;
- NI :Nice 的简写,与 Priority 有关,也是越小越早被运行;
- %CPU:CPU 的使用率;
- %MEM:内存的使用率;
- TIME+:CPU 使用时间的累加;
top 默认使用 CPU 使用率 (%CPU) 作为排序的重点,如果你想要使用内存使用率排序,则可以按下『M』, 若要回复则按下『P』即可 - 如果想要持续观察某个PID:top -d 2 -p 3083
[root@192 ~]# top -d 2 -p 3083
top - 23:06:40 up 2:35, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.5%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%s
Mem: 1004112k total, 930016k used, 74096k free, 61332k buffers
Swap: 2031612k total, 0k used, 2031612k free, 558664k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3083 root 20 0 99.7m 4164 3168 S 0.5 0.4 0:00.35 sshd
- 最后如果想查看程序之间的相关性,可以使用pstree 这个命令
[root@192 ~]# pstree -Aup
init(1)-+-NetworkManager(1581)-+-dhclient(1651)
| `-{NetworkManager}(1652)
|-abrtd(1940)
|-acpid(1738)
|-atd(1982)
|-auditd(1412)---{auditd}(1413)
|-automount(1869)-+-{automount}(1870)
| |-{automount}(1871)
| |-{automount}(1887)
| `-{automount}(1890)
|-bonobo-activati(2474,liumi8)---{bonobo-activat}(2475)
|-certmonger(1998)
|-clock-applet(2694,liumi8)
|-console-kit-dae(2121)-+-{console-kit-da}(2122)
| |-{console-kit-da}(2123)
| |-{console-kit-da}(2124)
| |-{console-kit-da}(2125)
| |-{console-kit-da}(2126)
| |-{console-kit-da}(2127)
| |-{console-kit-da}(2128)
| |-{console-kit-da}(2129)
| |-{console-kit-da}(2130)
| |-{console-kit-da}(2131)
| |-{console-kit-da}(2132)
| |-{console-kit-da}(2133)
| |-{console-kit-da}(2134)
| |-{console-kit-da}(2135)
| |-{console-kit-da}(2136)
| |-{console-kit-da}(2137)
| |-{console-kit-da}(2138)
| |-{console-kit-da}(2139)
| |-{console-kit-da}(2140)
| |-{console-kit-da}(2141)
| |-{console-kit-da}(2142)
| |-{console-kit-da}(2143)
| |-{console-kit-da}(2144)
| |-{console-kit-da}(2145)
| |-{console-kit-da}(2146)
| |-{console-kit-da}(2147)
| |-{console-kit-da}(2148)
| |-{console-kit-da}(2149)
| |-{console-kit-da}(2150)
| |-{console-kit-da}(2151)
| |-{console-kit-da}(2152)
| |-{console-kit-da}(2153)
| |-{console-kit-da}(2154)
| |-{console-kit-da}(2155)
| |-{console-kit-da}(2156)
| |-{console-kit-da}(2157)
| |-{console-kit-da}(2158)
| |-{console-kit-da}(2159)
| |-{console-kit-da}(2160)
| |-{console-kit-da}(2161)
| |-{console-kit-da}(2162)
| |-{console-kit-da}(2163)
| |-{console-kit-da}(2164)
| |-{console-kit-da}(2165)
| |-{console-kit-da}(2166)
| |-{console-kit-da}(2167)
| |-{console-kit-da}(2168)
| |-{console-kit-da}(2169)
| |-{console-kit-da}(2170)
| |-{console-kit-da}(2171)
| |-{console-kit-da}(2172)
| |-{console-kit-da}(2173)
| |-{console-kit-da}(2174)
| |-{console-kit-da}(2175)
| |-{console-kit-da}(2176)
| |-{console-kit-da}(2177)
| |-{console-kit-da}(2178)
| |-{console-kit-da}(2179)
| |-{console-kit-da}(2180)
| |-{console-kit-da}(2181)
| |-{console-kit-da}(2182)
| |-{console-kit-da}(2183)
| `-{console-kit-da}(2185)
|-crond(1967)
|-cupsd(1654)
|-dbus-daemon(1567,dbus)---{dbus-daemon}(1570)
|-dbus-daemon(2352,liumi8)---{dbus-daemon}(2353)
|-dbus-launch(2191,gdm)
|-dbus-launch(2351,liumi8)
|-devkit-power-da(2197)
|-fcoemon(1552)
|-gconf-im-settin(2685,liumi8)
|-gconfd-2(2429,liumi8)
|-gdm-binary(2067)-+-gdm-simple-slav(2104)-+-Xorg(2107)
| | |-gdm-session-wor(2255)-+-gnome-session(2343,liumi8)-+-bluetooth-apple(2493)
| | | | |-evolution-alarm(2512)
| | | | |-gdu-notificatio(2492)
| | | | |-gnome-panel(2457)
| | | | |-gnome-power-man(2525)
| | | | |-gnome-volume-co(2515)
| | | | |-gpk-update-icon(2508)---{gpk-update-ico}(2766)
| | | | |-metacity(2452)
| | | | |-nautilus(2472)
| | | | |-nm-applet(2501)
| | | | |-polkit-gnome-au(2507)
| | | | |-python(2520)
| | | | |-restorecond(2495)
| | | | `-{gnome-session}(2431)
| | | `-{gdm-session-wo}(2344)
| | `-{gdm-simple-sla}(2108)
| `-{gdm-binary}(2105)
|-gdm-user-switch(2695,liumi8)
|-gnome-keyring-d(2333,liumi8)-+-{gnome-keyring-}(2334)
| `-{gnome-keyring-}(2436)
|-gnome-screensav(2530,liumi8)
|-gnome-settings-(2438,liumi8)---{gnome-settings}(2440)
|-gnome-terminal(2734,liumi8)-+-bash(2736)
| |-gnome-pty-helpe(2735)
| `-{gnome-terminal}(2737)
|-gnote(2696,liumi8)
|-gvfs-afc-volume(2513,liumi8)---{gvfs-afc-volum}(2522)
|-gvfs-gdu-volume(2482,liumi8)
|-gvfs-gphoto2-vo(2524,liumi8)
|-gvfsd(2443,liumi8)
|-gvfsd-burn(2704,liumi8)
|-gvfsd-computer(2729,liumi8)
|-gvfsd-metadata(2711,liumi8)
|-gvfsd-trash(2487,liumi8)
|-hald(1768,haldaemon)-+-hald-runner(1771,root)-+-hald-addon-acpi(1823,haldaemon)
| | |-hald-addon-inpu(1819)
| | `-hald-addon-stor(1820)
| `-{hald}(1776)
|-im-settings-dae(2532,liumi8)
|-lldpad(1525)
|-mingetty(2072)
|-mingetty(2074)
|-mingetty(2076)
|-mingetty(2078)
|-mingetty(2080)
|-modem-manager(1585)
|-notification-ar(2697,liumi8)
|-packagekitd(3146)
|-pcscd(1851)---{pcscd}(1858)
|-polkitd(2238)
|-pulseaudio(2456,liumi8)-+-gconf-helper(2471)
| |-{pulseaudio}(2465)
| `-{pulseaudio}(2466)
|-rpc.statd(1604,rpcuser)
|-rpcbind(1503,rpc)
|-rsyslogd(1446)-+-{rsyslogd}(1447)
| |-{rsyslogd}(1449)
| `-{rsyslogd}(1450)
|-rtkit-daemon(2249,rtkit)-+-{rtkit-daemon}(2250)
| `-{rtkit-daemon}(2251)
|-seahorse-daemon(2446,liumi8)
|-sshd(2064)---sshd(3083)---bash(3087)-+-pstree(3153)
| `-top(3141)
|-trashapplet(2483,liumi8)
|-udevd(540)-+-udevd(2087)
| `-udevd(2088)
|-udisks-daemon(2489)---udisks-daemon(2498)
|-wnck-applet(2484,liumi8)
`-wpa_supplicant(1655)
通过上面的输出可以看出, 所有的程序都是依附在 init 这支程序底下的! 仔细看一下,这支程序的 PID 是一号,因为他是由 Linux 核心所主动呼叫的第一支程序!所以 PID 就是一号了