Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2395958
  • 博文数量: 328
  • 博客积分: 4302
  • 博客等级: 上校
  • 技术积分: 5486
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-01 11:14
个人简介

悲剧,绝对的悲剧,悲剧中的悲剧。

文章分类

全部博文(328)

文章存档

2017年(6)

2016年(18)

2015年(28)

2014年(73)

2013年(62)

2012年(58)

2011年(55)

2010年(28)

分类: 系统运维

2012-03-08 14:54:09

linux上进程有5种状态: 

1. 运行(正在运行或在运行队列中等待) 
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) 

ps工具标识进程的5种状态码: 
D 不可中断 uninterruptible sleep (usually IO) 
R 运行 runnable (on run queue) 
S 中断 sleeping 
T 停止 traced or stopped 
Z 僵死 a defunct ("zombie") process 


注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页). 


可以用下面命令查看进程状态
ps -aux


也可以这样使用ps格式输出来查看进程状态: 
ps -eo user,stat..,cmd 



user          用户名 
uid           用户号 
pid           进程号 
ppid          父进程号 
size          内存大小, Kbytes字节. 
vsize         总虚拟内存大小, bytes字节(包含code+data+stack) 
share         总共享页数 
nice          进程优先级(缺省为0, 最大为-20) 
priority(pri) 内核调度优先级 
pmem          进程分享的物理内存数的百分比 
trs           程序执行代码驻留大小 
rss           进程使用的总物理内存数, Kbytes字节 
time          进程执行起到现在总的CPU暂用时间 
stat          进程状态 
cmd(args)     执行命令的简单格式 

进程STAT状态

  1. D 无法中断的休眠状态(通常 IO 的进程);
  2. R 正在运行,在可中断队列中;
  3. S 处于休眠状态,静止状态;
  4. T 停止或被追踪,暂停执行;
  5. W 进入内存交换(从内核2.6开始无效);
  6. X 死掉的进程;
  7. Z 僵尸进程不存在但暂时无法消除;
  8. W: 没有足够的记忆体分页可分配WCHAN 正在等待的进程资源;
  9. <: 高优先级进程
  10. N: 低优先序进程
  11. L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O),即,有些页被锁进内存
  12. s 进程的领导者(在它之下有子进程);
  13. l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
  14. + 位于后台的进程组;



例子: 
查看当前系统进程的uid,pid,stat,pri, 以uid号排序. 
ps -eo pid,stat,pri,uid --sort uid 


查看当前系统进程的user,pid,stat,rss,args, 以rss排序. 
ps -eo user,pid,stat,rss,args --sort rss 

 

以下摘自CSDN论坛

在Linux下,还有一种方法检查某个进程是否存在:利用/proc文件系统.   /proc/pid/stat里面有进程的状态,进程可执行文件名等.如果该文件不存在了,那进程肯定退出了.如果存在,可以检查状态和文件名是否正确. 效率可能比PS还是高一些,因为/proc是虚拟文件系统,存在与内存中.

如何利用/proc文件系统  
  cat   /proc/pid/status  
  这里pid是你的进程ID,看看输出结果,有一栏是State  
   
  你要利用/proc文件系统时,int   fd   =   open(   "/proc/pid/status",   O_RDONLY   );  
  这里pid是实际的进程的pid,如果open失败,刚进程显然不存在,然后读取该文件的内容,找出State  

转载自http://chenling1018.blog.163.com/blog/static/148025420103140200634/
阅读(4374) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

huaius2012-03-14 18:15:43

我是月老: 记得以前学的时候是三种状态:运行,就绪,阻塞…….....
估计科技进步了吧...

上学的时候老师明确说两台机器网线直连的话,要用改线序的网线呢。
前几天才得知早就不用这样了,现在的网卡都智能了

我是月老2012-03-08 23:52:41

记得以前学的时候是三种状态:运行,就绪,阻塞……