zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    MSBuild、条件编译、预处理命令
    批量数据插入SqlBulkCopy
    WPF 双向绑定
    编程思想之一
    python 提交表单
    python 添加用户
    python 分页
    day9 IO多路复用
    day9 线程、进程和协程深入版
    day8 进程、线程 简介版
  • 原文地址:https://www.cnblogs.com/sgawscd/p/12732416.html
Copyright © 2011-2022 走看看