您的位置:首页 > 编程语言 > C语言/C++

一起talk C栗子吧(第一百二十八回:C语言实例--查看当前进程信息)

2016-03-23 22:29 375 查看
各位看官们,大家好,上一回中咱们说的是查看main函数参数的例子,这一回咱们说的例子是:查看当前进程信息。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们, 我们在上一回中介绍了使用特殊文件系统:proc来查看main函数的命令行参数。后来有些看官提了些疑问,我在这里统一做下解答。

第一个疑问是关于例子中的代码,详细的代码如下:

#include <stdio.h>

int main(int argc, char *argv[])
{
int i = 0;

while(i++ < argc*3)
sleep(1);

return 0;
}


有看官使用该例子后,不能得到想要的结果,我觉得可能是等待的时间比较长了。我之所以使用这种代码,是因为它可以让大家在查看proc/PID中的内容时,确保拥有PID的进程还在系统中运行。代码中的循环会让程序进行sleep操作,每次sleep1秒,sleep的次数为程序中参数数量的3倍,例如,程序中有2个参数a和b,那么程序会sleep3次(程序名称也会被当作1个参数),每次sleep1秒,一共sleep3秒。只要等待的时间不超过3秒,都可以查看proc/PID中的内容。

每位看官的等待时间可能不相同,为了解决这个问题,我们可以使用self关键字,这样就不需要上面例子中的代码了。接下来我们通过实际的例子来说明:

cat /proc/self/cmdline     //在终端中执行该命令,命令中使用了self关键字
cat/proc/self/cmdline      //终端中显示当前进程的命令行参数,这里省略了终端的提示信息


从上面的中结果中可以看到,我们使用self关键字替代了/proc/PID,并且得到了当前运行进程的命令行参数,也就是我们在上一回中提到的main函数的参数。另外,我们也可以看到命令运行结果中显示的命令行参数和我们执行命令时输入的命令行参数完全相同。

第二个疑问是关于进程的信息,有看官说,进程除了命令行参数外,还有其它信息呢,比如常用的PID。我在这里做统一的回答:我们可以使用ps命令查看进程的PID,还有命令行参数。我们举例子说明一下:

ps -x          //在终端中执行ps命令,并且加上x参数
PID TTY      STAT   TIME COMMAND
2731 pts/1    Ss     0:00 bash      //其它的进程省略不写
2943 pts/1    R+     0:00 ps -x     //这个就是当前的进程


从上面的运行结果中可以看到,ps命令可以显示当前的进程PID,而且还有命令行参数。不过ps命令显示的进程是系统中所有的进程,我们只列出了其中的一部分。

除了ps命令外,我们也可以借助proc这个特殊的文件系统来查看当前进程的信息。在proc文件系统中,进程的相关信息存储中/proc/PID/status这个文件中,我们可以使用cat命令查看该文件的内容,进而得到进程相关的信息。接下来,我们举个例子来说明:

cat /proc/self/status           //在终端中使用cat命令查看proc中文件的内容
Name:   cat                     //下面是文件中的内容,这个内容表示进程的名称
State:  R (running)
Tgid:   2994
Ngid:   0
Pid:    2994                     //进程的PID
PPid:   2731
TracerPid:  0
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000
FDSize: 256
Groups: 4 24 27 30 46 108 110 1000
VmPeak:     5924 kB
VmSize:     5924 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:       540 kB
VmRSS:       540 kB
VmData:      160 kB
VmStk:       136 kB
VmExe:        44 kB
VmLib:      1828 kB
VmPTE:        24 kB
VmSwap:        0 kB
Threads:    1                       //进程中线程的数量,这里只有一个线程
SigQ:   0/31070
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000001fffffffff
Seccomp:    0
Cpus_allowed:   f
Cpus_allowed_list:  0-3
Mems_allowed:   1
Mems_allowed_list:  0
voluntary_ctxt_switches:    1
nonvoluntary_ctxt_switches: 1


我们再次使用self关键字来查看proc中的文件,进而提到了当前进程的信息。该文件中显示的进程信息比ps命令显示的信息要多一些。看官们可以依据自己的需要来查看进程的信息。另外,该方法只显示当前进程的信息,没有显示系统中其它进程的信息。ps命令会显示系统中所有进程的信息。在上面的运行结果中,我在常见的进程信息后面添加了注释,方便大家理解,其它没有添加注释的信息,我们以后遇到了再给大家作解释。目前,大家先掌握这种查看进程信息的方法就可以。

各位看官,关于查看当前进程信息的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: