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