Linux下进程信息的深入分析
这里我们主要介绍进程的状态,进程的状态可以通过/proc/PID/status来查看,也可以通过/proc/PID/stat来查看.
如果说到工具大家用的最多的ps也可以看到进程的信息.这里我们通过/proc/PID/status来分析进程的信息.
在2.6.18之后的内核,多了capibilty/cpusets等信息.
[root@localhost
1499]# ps -He
[root@localhost 1499]# cd /proc/1499/
[root@localhost 1499]#
more status
State: S
(sleeping)
解释:进程的状态我们前文已经做了很详细的分析,各进程的状态代表的意义如下:
R (running)", "S
(sleeping)", "D (disk sleep)", "T (stopped)", "T(tracing stop)", "Z (zombie)",
or "X (dead)"
Tgid: 1499
解释:Tgid是线程组的ID,一个线程一定属于一个线程组(进程组).
Pid:
987
解释:这个是进程的ID,更准确的说应该是线程的ID.
注:/proc/pid/status中的Pid就是ps命令的LWP列输出,PID一列其实是进程组,而LWP是轻量级进程,也就是线程,因为所有的进程必须一个线程,那就是它自己.
FDSize:
32
解释:
FDSize是当前分配的文件描述符,这个值不是当前进程使用文件描述符的上限.
我们看到这里是32,但实际并没有分配32个文件,如下:
我们看到这里只用到了18个文件描述符.而如果超过32个文件描述符,将以32进行递增,如果是64位系统,将以64进行递增.
FDSize这个值不会减少,如果我们程序打开了300个文件,并不会因为关闭文件,而减少FDSize这个值.
voluntary_ctxt_switches: 1
nonvoluntary_ctxt_switches:
0
voluntary_ctxt_switches表示进程主动切换的次数.
nonvoluntary_ctxt_switches表示进程被动切换的次数.
首先查看一下当前进程,如下:
echo
$$
1544
执行如下命令:
while ((1)); do echo 1; sleep 1;
done
查看该进程的主动切换与被动切换,如下:
cat status
略
voluntary_ctxt_switches:
949
nonvoluntary_ctxt_switches: 55
我们看到主动切换和被动切换有了明显的变化.
深入分析Linux内核源码-第五章进程调度
http://www.chinaunix.net/old_jh/6/32963.html
原文地址:http://www.cnblogs.com/createyuan/p/3728340.html