Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36728
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 179
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-18 17:05
文章分类
文章存档

2014年(3)

2013年(7)

我的朋友

分类: LINUX

2013-11-19 13:14:41

此例并不是一个ps命令的详解,也不是进程体系的深究。只是无意中把自己遇到的两个小知识点(僵尸进程和Linux下查看进程信息)结合了。

首先引入一个僵尸进程实例:


//zombie.c
#include 
#include 
#include 
int main (void)
{
    pid_t pid;
    pid = fork();
    if(pid < 0){
    perror("fork failed");
    exit(1);
}
if(pid > 0){
    int x ;
    for( x =1; ; x++){
        sleep(1);
        printf("The parent has slept %d seconds\n",x);
    }
}
    return 0;
}



ps命令用处为显示进程,后边跟着列表详情,可以随意缩减

#ps -eo pid,tid,ppid,comm
ppid是parent
#ps -eo pid,tid


由于ppid是parent's pid,我就小追溯一下,一个终端编译运行zombie.c,打开另一终端进行进程查看

h@ubuntu:~$ ps -u
Warning: bad ps syntax, perhaps a bogus '-'? See 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
h         2427  0.0  0.3   6940  3636 pts/0    Ss   Nov11   0:02 bash
h         6381  0.0  0.3   6940  3628 pts/1    Ss+  Nov11   0:01 bash
h        13961  0.0  0.0   1700   248 pts/0    S+   00:28   0:00 ./zombie
h        13962  0.0  0.0      0     0 pts/0    Z+   00:28   0:00 [zom] 
h        13968  0.1  0.3   6940  3624 pts/2    Ss   00:28   0:00 bash
h        14086  0.0  0.1   4708  1192 pts/2    R+   00:39   0:00 ps -u
可以看到[zom],这个进程已经是僵尸了,再看看父子关系。
#ps -eo -pid,tid,ppid,comm

  PID   TID  PPID COMMAND
    1     1     0 init
    2     2     0 kthreadd
    3     3     2 ksoftirqd/0
    6     6     2 migration/0
    7     7     2 cpuset
    8     8     2 khelper
    9     9     2 netns
   10    10     2 sync_supers
   11    11     2 bdi-default
   12    12     2 kintegrityd
   13    13     2 kblockd
   14    14     2 kacpid
   15    15     2 kacpi_notify
   16    16     2 kacpi_hotplug
   17    17     2 ata_sff
   18    18     2 khubd
   19    19     2 md
   22    22     2 khungtaskd
   23    23     2 kswapd0
.......
 2422  2422     1 gnome-terminal
 2426  2426  2422 gnome-pty-helpe
 2427  2427  2422 bash
 4132  4132     1 bamfdaemon
 6341  6341   414 udevd
 6344  6344     2 kworker/u:0
 6381  6381  2422 bash
 6750  6750     1 soffice.bin
 7829  7829   414 udevd
11248 11248     1 dbus-launch
11249 11249     1 dbus-daemon
12410 12410     1 check-new-relea
12687 12687   609 dhclient
13769 13769     2 kworker/0:2
13917 13917     2 kworker/0:0
13961 13961  2427 zombie
13962 13962 13961 zombie 
第三列是PPID,即使不是很清楚这里边的内涵,闭着眼猜也能猜出个一二来了。可以看到僵尸进程13962确实是由父进程13961(我的可执行文件叫zombie)创造的,而13961是2427bash创造的,2427是由2422gnome-terminal,也就是我打开的终端创造的,那么终端2422的parent就是1了,1已经是init了,这大概也就是这个系统从初始化到我运行的这个东西的一个流程了吧,这个Linux还真是便于学习,一目了然,具体1,2,3等等都是干什么的就先不管了,很多进程全是直接衍生自1和2,而间接衍生自0(这个神秘的带头大哥0到底是什么,列表上没有显示出来,也许他根本就不存在,但是为什么1和2的PPID是0呢?留下一个悬念~!)。



测试:证明第一个zombie不代表系统方面的含义,只是一条command只有[zom]是系统赋予的含义(系统手懒,都是喜欢缩写的。。。。)

如下,command改成了zombieName


h@ubuntu:~$ ps -u
Warning: bad ps syntax, perhaps a bogus '-'? See 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
h         2427  0.0  0.3   6940  3636 pts/0    Ss   Nov11   0:02 bash
h         6381  0.0  0.3   6940  3628 pts/1    Ss+  Nov11   0:01 bash
h        13968  0.0  0.3   6940  3624 pts/2    Ss   00:28   0:00 bash
h        14102  0.0  0.0   1700   244 pts/0    S+   00:41   0:00 ./zombieName
h        14103  0.0  0.0      0     0 pts/0    Z+   00:41   0:00 [zom] 
h        14105  0.0  0.1   4708  1188 pts/2    R+   00:42   0:00 ps -u


本例只作为一个引入,既然自己是学Linux的系统的,深究的内容就交给以后完成了。


阅读(1594) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~