Linux系統調用:獲取進程PID


1.獲取進程ID

每個進程都有一個唯一的非零進程PID,下面是得到這個PID的函數原型及相關頭文件:

#include<sys/types.h>//pid_t定義在這個頭文件中
#include<unistd.h>   //意為unix std,是POSIX標准定義的,包含許多系統服務的函數原型
pid_t getpid(void);//返回調用進程的PID
pid_t getppid(void);//返回父進程的PID
//pid_t 在types.h中被定義為int

使用示例:

//a.c
#include<sys/types.h>
#include<unistd.h>
int main()
{
	printf("pid: %d\n",getpid());
	printf("ppid: %d\n",getppid());
}
/*
	gcc -o getpid a.c
	./getpid
	重復多次可以發現每次運行結果中pid是不斷變化的,可見每次創建進程隨機分配一個pid
	但是ppid每次都是一樣的,由此可見每次創建這個進程的進程(即父進程)是同一個。
*/

得到的ppid是一個正整數,在我的機器上是24176.

在/proc目錄下可以看到很多進程的信息

linux> cd /proc
linux> ls
#找到示例運行得到的ppid
linux> cd 24176                       #進入進程信息目錄
linux> ll                             #或ls -l
#下面是我得到的結果
total 0
dr-xr-xr-x  9 root root 0 Apr 19 13:45 .
dr-xr-xr-x 92 root root 0 May 22  2019 ..
dr-xr-xr-x  2 root root 0 Apr 19 13:55 attr
-rw-r--r--  1 root root 0 Apr 19 13:55 autogroup
-r--------  1 root root 0 Apr 19 13:55 auxv
-r--r--r--  1 root root 0 Apr 19 13:55 cgroup
--w-------  1 root root 0 Apr 19 13:55 clear_refs
-r--r--r--  1 root root 0 Apr 19 13:45 cmdline
-rw-r--r--  1 root root 0 Apr 19 13:55 comm
-rw-r--r--  1 root root 0 Apr 19 13:55 coredump_filter
-r--r--r--  1 root root 0 Apr 19 13:55 cpuset
lrwxrwxrwx  1 root root 0 Apr 19 13:55 cwd -> /proc/24176
-r--------  1 root root 0 Apr 19 13:55 environ
lrwxrwxrwx  1 root root 0 Apr 19 13:45 exe -> /usr/bin/bash
#看到這個bash,我猜測這個進程極有可能就是linux shell,即shell是我們的程序對應進程的父進程
dr-x------  2 root root 0 Apr 19 13:45 fd
dr-x------  2 root root 0 Apr 19 13:55 fdinfo
-rw-r--r--  1 root root 0 Apr 19 13:55 gid_map
-r--------  1 root root 0 Apr 19 13:55 io
-r--r--r--  1 root root 0 Apr 19 13:55 limits
-rw-r--r--  1 root root 0 Apr 19 13:55 loginuid
dr-x------  2 root root 0 Apr 19 13:55 map_files
-r--r--r--  1 root root 0 Apr 19 13:55 maps
-rw-------  1 root root 0 Apr 19 13:55 mem
-r--r--r--  1 root root 0 Apr 19 13:55 mountinfo
-r--r--r--  1 root root 0 Apr 19 13:55 mounts
-r--------  1 root root 0 Apr 19 13:55 mountstats
dr-xr-xr-x  5 root root 0 Apr 19 13:55 net
dr-x--x--x  2 root root 0 Apr 19 13:55 ns
-r--r--r--  1 root root 0 Apr 19 13:55 numa_maps
-rw-r--r--  1 root root 0 Apr 19 13:55 oom_adj
-r--r--r--  1 root root 0 Apr 19 13:55 oom_score
-rw-r--r--  1 root root 0 Apr 19 13:55 oom_score_adj
-r--r--r--  1 root root 0 Apr 19 13:55 pagemap
-r--r--r--  1 root root 0 Apr 19 13:55 personality
-rw-r--r--  1 root root 0 Apr 19 13:55 projid_map
lrwxrwxrwx  1 root root 0 Apr 19 13:55 root -> /
-rw-r--r--  1 root root 0 Apr 19 13:55 sched
-r--r--r--  1 root root 0 Apr 19 13:55 schedstat
-r--r--r--  1 root root 0 Apr 19 13:55 sessionid
-rw-r--r--  1 root root 0 Apr 19 13:55 setgroups
-r--r--r--  1 root root 0 Apr 19 13:55 smaps
-r--r--r--  1 root root 0 Apr 19 13:55 stack
-r--r--r--  1 root root 0 Apr 19 13:45 stat
-r--r--r--  1 root root 0 Apr 19 13:55 statm
-r--r--r--  1 root root 0 Apr 19 13:45 status
-r--r--r--  1 root root 0 Apr 19 13:55 syscall
dr-xr-xr-x  3 root root 0 Apr 19 13:55 task
-r--r--r--  1 root root 0 Apr 19 13:55 timers
-rw-r--r--  1 root root 0 Apr 19 13:55 uid_map
-r--r--r--  1 root root 0 Apr 19 13:55 wchan

總結

pid_t getpid(void);//返回當前進程pid
pid_t getppid(void);//返回父進程pid


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM