各位看官們,大家好,上一回中咱們說的是查看main函數參數的例子,這一回咱們說的例子是:查看當前進程信息。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們, 我們在上一回中介紹了使用特殊文件系統:proc來查看main函數的命令行參數。後來有些看官提了些疑問,我在這裡統一做下解答。
第一個疑問是關於例子中的代碼,詳細的代碼如下:
#include
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命令會顯示系統中所有進程的信息。在上面的運行結果中,我在常見的進程信息後面添加了注釋,方便大家理解,其它沒有添加注釋的信息,我們以後遇到了再給大家作解釋。目前,大家先掌握這種查看進程信息的方法就可以。
各位看官,關於查看當前進程信息的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。