Linux-程序管理

在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 就是一号了

你可能感兴趣的:(Linux-程序管理)