Linux系统调用:获取进程PID
Posted shadowgully
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
",getpid());
printf("ppid: %d
",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
以上是关于Linux系统调用:获取进程PID的主要内容,如果未能解决你的问题,请参考以下文章