- A+
所属分类:Linux
对于一个运行中的进程,我们可以使用kill -STOP pid命令将其暂停执行,使用kill -CONT pid命令恢复其运行。
下面用一个实例说明:
1、首先使用tar命令打包/usr目录:
1 |
[crayon-65c488c7dcb9f372331130 inline="true" class="hljs ruby has-numbering"][root<span class="hljs-variable">@vps</span> /]<span class="hljs-comment"># tar zcf usr.tar.gz usr/</span> |
[/crayon]
开启一个新窗口查看其进程状态:
1 2 |
[crayon-65c488c7dcba4817975526 inline="true" class="hljs avrasm has-numbering"][root@vps ~]<span class="hljs-preprocessor"># ps aux|grep tar</span> root <span class="hljs-number">18900</span> <span class="hljs-number">2.7</span> <span class="hljs-number">0.4</span> <span class="hljs-number">2760</span> <span class="hljs-number">1068</span> pts/<span class="hljs-number">1</span> R+ <span class="hljs-number">09</span>:<span class="hljs-number">23</span> <span class="hljs-number">0</span>:<span class="hljs-number">00</span> tar zcf usr<span class="hljs-preprocessor">.tar</span><span class="hljs-preprocessor">.gz</span> usr/ |
[/crayon]
进程处于运行状态(R)
1 |
[crayon-65c488c7dcba8115057382 inline="true" class="hljs ruby has-numbering"][root<span class="hljs-variable">@vps</span> ~]<span class="hljs-comment"># kill -STOP 18900</span> |
[/crayon]
再观察其状态:
1 2 |
[crayon-65c488c7dcbac707168255 inline="true" class="hljs avrasm has-numbering"][root@vps ~]<span class="hljs-preprocessor"># ps aux|grep tar</span> root <span class="hljs-number">18900</span> <span class="hljs-number">1.4</span> <span class="hljs-number">0.4</span> <span class="hljs-number">2816</span> <span class="hljs-number">1120</span> pts/<span class="hljs-number">1</span> T <span class="hljs-number">09</span>:<span class="hljs-number">23</span> <span class="hljs-number">0</span>:<span class="hljs-number">00</span> tar zcf usr<span class="hljs-preprocessor">.tar</span><span class="hljs-preprocessor">.gz</span> usr/ |
3、使用kill -CONT恢复进程执行
1 2 3 |
[crayon-65c488c7dcbb0811493990 inline="true" class="hljs coffeescript has-numbering"][root<span class="hljs-property">@vps</span> ~]<span class="hljs-comment"># kill -CONT 18900</span> [root<span class="hljs-property">@vps</span> ~]<span class="hljs-comment"># ps aux|grep tar</span> root <span class="hljs-number">18900</span> <span class="hljs-number">1.5</span> <span class="hljs-number">0.4</span> <span class="hljs-number">2816</span> <span class="hljs-number">1128</span> pts<span class="hljs-regexp">/1 R 09:39 0:00 tar zcf usr.tar.gz usr/</span> |
[/crayon]
进程恢复运行状态(R)
附:
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
[crayon-65c488c7dcbb4932236125 inline="true" class="hljs haml has-numbering"]ps的用法: 常用参数 -<span class="ruby"><span class="hljs-constant">A</span> 显示所有进程(等价于-e)(utility) </span>-<span class="ruby">a 显示一个终端的所有进程,除了会话引线 </span>-<span class="ruby"><span class="hljs-constant">N</span> 忽略选择。 </span>-<span class="ruby">d 显示所有进程,但省略所有的会话引线(utility) </span>-<span class="ruby">x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility) </span>-<span class="ruby">p pid 进程使用cpu的时间 </span>-<span class="ruby">u uid <span class="hljs-keyword">or</span> username 选择有效的用户id或者是用户名 </span>-<span class="ruby">g gid <span class="hljs-keyword">or</span> groupname 显示组的所有进程。 </span>U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U zhang;(utility) -<span class="ruby">f 全部列出,通常和其他选项联用。如:ps -fa <span class="hljs-keyword">or</span> ps -fx <span class="hljs-keyword">and</span> so on. </span>-<span class="ruby">l 长格式(有<span class="hljs-constant">F</span>,wchan,<span class="hljs-constant">C</span> 等字段) </span>-<span class="ruby">j 操作格式 </span>-<span class="ruby">o 用户自定义格式。 </span>v 以虚拟存储器格式显示 s 以信号格式显示 -<span class="ruby">m 显示所有的线程 </span>-<span class="ruby"><span class="hljs-constant">H</span> 显示进程的层次(和其它的命令合用,如:ps -<span class="hljs-constant">Ha</span>)(utility) </span>e 命令之后显示环境(如:ps -d e; ps -a e)(utility) h 不显示第一行 au(x) 输出格式 : USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND USER: 行程拥有者 PID: pid <span class="hljs-tag">%<span class="hljs-title">CPU</span></span>: 占用的 CPU 使用率 <span class="hljs-tag">%<span class="hljs-title">MEM</span></span>: 占用的记忆体使用率 VSZ: 占用的虚拟记忆体大小 RSS: 占用的记忆体大小 TTY: 终端的次要装置号码 (minor device number of tty) STAT: 该行程的状态: D: 不可中断的静止 R: 正在执行中 S: 静止状态 T: 暂停执行 Z: 不存在但暂时无法消除 W: 没有足够的记忆体分页可分配 <: 高优先序的行程 N: 低优先序的行程 L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O) START: 行程开始时间 TIME: 执行的时间 COMMAND:所执行的指令 进程STAT状态: D 无法中断的休眠状态(通常 IO 的进程); R 正在运行,在可中断队列中; S 处于休眠状态,静止状态; T 停止或被追踪,暂停执行; W 进入内存交换(从内核2.6开始无效); X 死掉的进程; Z 僵尸进程不存在但暂时无法消除; W: 没有足够的记忆体分页可分配 WCHAN 正在等待的进程资源; <: 高优先级进程 N: 低优先序进程 L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O),即,有些页被锁进内存 s 进程的领导者(在它之下有子进程); l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads); + 位于后台的进程组; |
[/crayon]
kill 终止进程有十几种控制进程的方法,下面是一些常用的方法:
1 2 3 4 5 6 7 8 |
[crayon-65c488c7dcbb9176204824 inline="true" class="hljs livecodeserver has-numbering"]<span class="hljs-built_in">kill</span> -STOP [pid] 发送SIGSTOP (<span class="hljs-number">17</span>,<span class="hljs-number">19</span>,<span class="hljs-number">23</span>)停止一个进程,而并不消灭这个进程。 <span class="hljs-built_in">kill</span> -CONT [pid] 发送SIGCONT (<span class="hljs-number">19</span>,<span class="hljs-number">18</span>,<span class="hljs-number">25</span>)重新开始一个停止的进程。 <span class="hljs-built_in">kill</span> -KILL [pid] 发送SIGKILL (<span class="hljs-number">9</span>)强迫进程立即停止,并且不实施清理操作。 <span class="hljs-built_in">kill</span> -<span class="hljs-number">9</span> -<span class="hljs-number">1</span> 终止你拥有的全部进程。 |
[/crayon]
SIGKILL 和 SIGSTOP 信号不能被捕捉、封锁或者忽略,但是,其它的信号可以。所以这是你的终极武器。