⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0440processcontrol.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
		通常,造成疆尸程序的成因是因为该程序应该已经执行完毕,或者是因故应该要终止了,
		但是该程序的父程序却无法完整的将该程序结束掉,而造成那个程序一直存在记忆体当中.....
		如果您发现在某个程序的 CMD 后面还接上 &lt;defunct> 时,就代表该程序是疆尸程序啦,例如∶<br>

<table class="term"><tr><td class="term"><pre>
apache  8683  0.0  0.9 83384 9992 ?   Z  14:33   0:00 /usr/sbin/httpd &lt;defunct>
</pre></td></tr></table>

		当系统不稳定的时候就容易造成所谓的疆尸程序,可能原因是因为程式写的不好啦,
		或者是使用者的操作习惯不良等等所造成。如果您发现系统中很多疆尸程序时,
		呵呵!记得啊!要找出该程序的父程序,然后好好的做个追踪,好好的进行主机的环境最佳化啊!
		看看有什么地方需要改善的,不要只是直接将他 kill 掉而已呢!
		不然的话,万一他一直产生,那可就麻烦了! @_@<br><br>
		</div>

		<a name=top><hr></a><li><span class=text_import1>top</span></li>
		<div class=block2>

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>top [-d] | top [-bnp]</span>
<span class=term_say>参数∶
-d  ∶后面可以接秒数,就是整个程序画面更新的秒数。预设是 5 秒;
-b  ∶以批次的方式执行 top ,还有更多的参数可以使用喔!
      通常会搭配资料流重导向来将批次的结果输出成为档案。
-n  ∶与 -b 搭配,意义是,需要进行几次 top 的输出结果。
-p  ∶指定某些个 PID 来进行观察监测而已。
在 top 执行过程当中可以使用的按键指令∶
	? ∶显示在 top 当中可以输入的按键指令;
	P ∶以 CPU 的使用资源排序显示;
	M ∶以 Memory 的使用资源排序显示;
	N ∶以 PID 来排序喔!
	T ∶由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
	k ∶给予某个 PID 一个讯号  (signal)
	r ∶给予某个 PID 重新制订一个 nice 值。
范例∶</span>

<span class=term_hd>范例一∶每两秒钟更新一次 top ,观察整体资讯∶</span>
[root@linux ~]# <span class=term_command>top -d 2</span>
top - 18:30:36 up 30 days, 7 min,  1 user,  load average: 0.42, 0.48, 0.45
Tasks: 163 total,   1 running, 161 sleeping,   1 stopped,   0 zombie
Cpu(s):  4.7% us,  4.0% sy,  6.3% ni, 82.5% id,  0.4% wa,  0.1% hi,  2.0% si
Mem:   1033592k total,   955252k used,    78340k free,   208648k buffers
Swap:  1052216k total,      728k used,  1051488k free,   360248k cached
    <span class=term_note>&lt;==如果加入 k 或 r 时,就会有相关的字样出现在这里喔!</span>
<span style="background-color:white; color:black">  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND </span>
 3981 apache    34  19 84012  11m 7352 S 17.3  1.2   0:00.09 httpd
 1454 mysql     16   0  289m  40m 2228 S  3.8  4.0 115:01.32 mysqld
 3985 dmtsai    15   0  2148  904  668 R  3.8  0.1   0:00.03 top
    1 root      16   0  3552  552  472 S  0.0  0.1   0:08.90 init
    2 root      RT   0     0    0    0 S  0.0  0.0   0:52.76 migration/0
    3 root      34  19     0    0    0 S  0.0  0.0   0:03.01 ksoftirqd/0

<span class=term_hd>范例二∶将 top 的资讯进行 2 次,然后将结果输出到 /tmp/top.txt</span>
[root@linux ~]# <span class=term_command>top -b -n 2 > /tmp/top.txt</span>
<span class=term_say># 这样一来,嘿嘿!就可以将 top 的资讯存到 /tmp/top.txt 档案中了。</span>

<span class=term_hd>范例三∶假设 10604 是一个已经存在的 PID ,仅观察该程序?</span>
[root@linux ~]# <span class=term_command>top -d 2 -p10604</span>
top - 13:53:00 up 51 days,  2:27,  1 user,  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.0% sy,  0.0% ni, 100.0% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:    385676k total,   371760k used,    13916k free,   131164k buffers
Swap:  1020116k total,      880k used,  1019236k free,    95772k cached

<span style="background-color:white; color:black">  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  </span>
10604 root      16   0  5396 1544 1244 S  0.0  0.4   0:00.07 bash

<span class=term_hd>范例四∶承上题,上面的 NI 值是 0 ,想要改成 10 的话?</span>
<span class=term_say># 在范例三的 top 画面当中直接按下 r 之后,会出现如下的图样!</span>
top - 13:53:00 up 51 days,  2:27,  1 user,  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.0% sy,  0.0% ni, 100.0% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:    385676k total,   371760k used,    13916k free,   131164k buffers
Swap:  1020116k total,      880k used,  1019236k free,    95772k cached
PID to renice: <span class=term_write>10604</span>
<span style="background-color:white; color:black">  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  </span>
10604 root      16   0  5396 1544 1244 S  0.0  0.4   0:00.07 bash

<span class=term_say># 之后,可以输入 nice 值了!</span>
top - 13:53:00 up 51 days,  2:27,  1 user,  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.0% sy,  0.0% ni, 100.0% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:    385676k total,   371760k used,    13916k free,   131164k buffers
Swap:  1020116k total,      880k used,  1019236k free,    95772k cached
Renice PID 10604 to value: <span class=term_write>10</span>
<span style="background-color:white; color:black">  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  </span>
10604 root      30  10  5396 1544 1244 S  0.0  0.4   0:00.07 bash
</pre></td></tr></table>

		top 也是个挺不错的程序观察工具!但不同于 ps 是静态的结果输出, top 
		这个程式可以持续的监测 (monitor) 整个系统的程序工作状态,例如上面的范例一所示啊!
		在预设的情况下,每次更新程序资源的时间为 5 秒,不过,可以使用 -d 来进行修改。<br><br>

		top 主要分为两个画面,上面的画面为整个系统的资源使用状态,基本上总共有六行,
		显示的内容依序是∶<ul>
		<li>第一行∶显示系统已启动的时间、目前上线人数、系统整体的负载(load)。
			比较需要注意的是系统的负载,三个数据分别代表 1, 5, 10 分钟的平均负载。
			一般来说,这个负载值应该不太可能超过 1 才对,除非您的系统很忙碌。
			如果持续高于 5 的话,那么.....仔细的看看到底是那个程序在影响整体系统吧!</li><br>
		<li>第二行∶显示的是目前的观察程序数量,比较需要注意的是最后的 zombie 那个数值,如果不是 0
			,嘿嘿!好好看看到底是那个 process 变成疆尸了吧?!</li><br>
		<li>第三行∶显示的是 CPU 的整体负载,每个项目可使用 ? 查阅。需要观察的是 id (idle) 
			的数值,一般来说,他应该要接近 100% 才好,表示系统很少资源被使用啊! ^_^。</li><br>
		<li>第四行与第五行∶表示目前的实体记忆体与虚拟记忆体 (Mem/Swap) 的使用情况。</li><br>
		<li>第六行∶这个是当在 top 程式当中输入指令时,显示状态的地方。
			例如范例四就是一个简单的使用例子。</ul>

		至于 top 底下的画面,则是每个 process 使用的资源情况。比较需要注意的是∶<ul>
		<li>PID ∶每个 process 的 ID 啦!
		<li>USER∶该 process 所属的使用者;
		<li>PR  ∶Priority 的简写,程序的优先执行顺序,越小越早被执行;
		<li>NI  ∶Nice 的简写,与 Priority 有关,也是越小越早被执行;
		<li>%CPU∶CPU 的使用率;
		<li>%MEM∶记忆体的使用率;
		<li>TIME+∶CPU 使用时间的累加;</ul>

		一般来说,如果鸟哥想要找出最损耗 CPU 资源的那个程序时,大多使用的就是 top 
		这支程式啦!然后强制以 CPU 使用资源来排序 (在 top 当中按下 P 即可),
		就可以很快的知道啦! ^_^。多多爱用这个好用的东西喔!<br><br>
		</div>

		<a name=pstree><hr></a><li><span class=text_import1>pstree</span></li>
		<div class=block2>

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>pstree [-Aup]</span>
<span class=term_say>参数∶
-A  ∶各程序树之间的连接以 ASCII 字元来连接;
-p  ∶并同时列出每个 process 的 PID;
-u  ∶并同时列出每个 process 的所属帐号名称。
范例∶</span>

<span class=term_hd>范例一∶列出目前系统上面所有的程序树的相关性∶</span>
[root@linux ~]# <span class=term_command>pstree -A</span>
init-+-atd
     |-crond
     |-dhclient
     |-dovecot-+-dovecot-auth
     |         `-3*[pop3-login]
     |-events/0
     |-2*[gconfd-2]
     |-master-+-pickup
     |        `-qmgr
     |-6*[mingetty]
     |-sshd---sshd---sshd---bash---su---bash---pstree
     |-udevd
     `-xinetd
<span class=term_say># 注意一下,为了节省版面,所以鸟哥已经删去很多程序了!
# 同时注意到 sshd--- 那一行,嘿嘿!有相关的程序都被列出在一起了!</span>

<span class=term_hd>范例二∶承上题,同时秀出 PID 与 users </span>
[root@linux ~]# <span class=term_command>pstree -Aup</span>
init(1)-+-atd(16143)
        |-crond(1676)
        |-dhclient(21339)
        |-dovecot(1606)-+-dovecot-auth(1616)
        |               |-pop3-login(747,dovecot)
        |               |-pop3-login(10487,dovecot)
        |               `-pop3-login(10492,dovecot)
        |-events/0(3)
        |-gconfd-2(2352)
        |-gconfd-2(32158)
        |-master(1666)-+-pickup(10817,postfix)
        |              `-qmgr(1675,postfix)
        |-mingetty(1792)
        |-mingetty(21366)
        |-sshd(5281)---sshd(10576)---sshd(10578,vbird)---bash(10579)
        |-syslogd(1539)
        |-udevd(801)
        `-xinetd(1589)
<span class=term_say># 呵呵!在括号 () 内的即是 PID 以及该程序的 owner 喔!不过,由于我是使用 
# root 的身份执行此一指令,所以棉,嘿嘿!属于root的可能就不会显示出来啦!</span>
</pre></td></tr></table>

		如果要找程序之间的相关性,呵呵!这个 pstree 真是好用到不行!
		直接输入 pstree 可以查到程序相关性,不过,有的时候由于语系的问题会出现乱码,
		因此,建议直接使用 -A 用 ASCII 字元作为连结介面 (就是那个 +, -, |, ` 等等啦!)
		会比较看的清楚点。另外,如果还想要知道 PID 与所属使用者,加上 -u 及 -p 两个参数即可。
		我们前面不是一直提到,如果子程序挂点或者是老是砍不掉子程序时,
		该如何找到父程序吗?呵呵!用这个 pstree 就对了! ^_^<br>
		</div>
	</div>

	<hr><a name=process_2></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>程序的删除</span><br>
	<div class=block2>
		我们在前几个小节提到的『<a href="#background">背景工作管理</a>』当中提到过,
		要给予某个已经存在的工作某些动作时,是直接给予一个讯号 (signal) 给该 PID 即可。
		常见的工作可以使用 kill -l (L 的小写) 来查阅!而主要的讯号代号与名称对应及内容是∶<br><br>

<table width=95% border=1 cellspacing=0 cellpadding=3 bgcolor=lightyellow>
<tr bgcolor=lightblue align=center><td width=30>代号</td><td width=50>名称</td><td>内容</td></tr>
<tr><td align=center>1</td><td align=center>SIGHUP</td><td>代表『让该 PID 重新读取自己的设定档』
	,类似重新启动</td></tr>
<tr><td align=center>2</td><td align=center>SIGINT</td><td>代表用键盘输入的 [ctrl]-c 来中断一个程序的进行。</td></tr>
<tr><td align=center>9</td><td align=center>SIGKILL</td><td>代表强制中断一个程序的进行,如

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -