linux系统命令ps和top都是通过读取/proc/$PID 目录下的信息获取进程的相关信息, 它遍历/proc目录下的首字符为数字的目录,获取系统进程的信息。

我们经常会把pid写到/var/run/xxx.pid中,可能会有获取该进程相关信息的需要,可以通过读取/proc/$PID取得ps命令可获取的一切进程信息。

下面是通过PID获取进程cmdline的实现:

/** getcmdline.c** Copyright (C) 2011 crazyleen <ruishenglin@126.com>* */#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>/** get cmdline from PID. Read progress info form /proc/$PID. */static int read_to_buf(const char *filename, void *buf, int len)
{int fd;int ret;if(buf == NULL || len < 0){printf("%s: illegal para\n", __func__);return -1;}memset(buf, 0, len);fd = open(filename, O_RDONLY);if(fd < 0){perror("open:");return -1;}ret = read(fd, buf, len);close(fd);return ret;
}static char *get_cmdline_from_pid(int pid, char *buf, int len)
{char filename[32];char *name = NULL;int n = 0;if(pid < 1 || buf == NULL || len < 0){printf("%s: illegal para\n", __func__);return NULL;}snprintf(filename, 32, "/proc/%d/cmdline", pid);n = read_to_buf(filename, buf, len);if(n < 0)return NULL;if(buf[n-1]=='\n')buf[--n] = 0;name = buf;while(n) {if(((unsigned char)*name) < ' ')*name = ' ';name++;n--;}*name = 0;name = NULL;if(buf[0])return buf;return NULL;
}int main(int argc, char **argv)
{char buf[1024];printf("============\n");printf("argv[0]: %s\n", argv[0]);get_cmdline_from_pid(getppid(), buf, 1024);printf("PPID [ %d ] cmdline: %s\n", getppid(), buf);;printf("PID  [ %d ] cmdline: %s\n", getpid(),  get_cmdline_from_pid(getpid(), buf, 1024));printf("init [ 1 ]  cmdline: %s\n", get_cmdline_from_pid(1, buf, 1024));printf("============\n");return 0;
}

输出结果:

$ gcc getcmdline.c && ./a.out -d 22
============
argv[0]: ./a.out
PPID [ 21751 ] cmdline: /bin/bash
PID  [ 22515 ] cmdline: ./a.out -d 22
init [ 1 ]  cmdline: /sbin/init
============

linux c 通过 pid 获取 进程相关信息 cmdline相关推荐

  1. muduo:获取进程相关信息

    muduo里面有专门获取进程信息的类,记录一下. // Use of this source code is governed by a BSD-style license // that can b ...

  2. 【C函数】sysinfo获取系统相关信息

    Linux中,sysinfo是用来获取系统相关信息的结构体,返回系统的统计信息. 头文件: #include <sys/sysinfo.h> 函数声明: int sysinfo (stru ...

  3. SSH初探:通过查看GPU的PID获取USER详细信息

    笔者课题组公用服务器,有时候遇到长时间训练占用GPU的情况,可以通过查看GPU的PID获取USER详细信息,从而沟通协商GPU的使用. watch -n 1 nvidia-smi 上面这个指令在Lin ...

  4. youtube根据vedioId获取视频相关信息

    根据vedioId获取视频相关信息 https://www.googleapis.com/youtube/v3/videos?key=xxx&id=I6uBoYJxf4k&part=s ...

  5. 7.3 Uipath UiPath之获取邮件相关信息

    UiPath之获取邮件相关信息 UiPath之获取邮件相关信息 第一步:先看看GetOutLookMailMessage这个应该怎么设定 第二步:新建一个Execl Application Scope ...

  6. 金蝶EAS登录获取用户相关信息失败、EAS默认用户名、密码

    1.sql2005,新装的EAS7.0服务器,新建一个帐套,都弄好了以后,客户端登陆的时候提示错误:获取用户相关信息失败!  日志里说该游标未声明 解决方法:在SQL SERVER执行alter ta ...

  7. adb 查看屏幕大小_adb shell wm 命令获取屏幕相关信息

    adb shell wm命令获取屏幕相关信息 Tags: adb_shell wm命令在4.x才有的,不同的版本下部分参数不同 wm [subcommand] [options] 获取屏幕大小:wm ...

  8. Linux通过PID查看进程完整信息

    说明 通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等. 先通过top查看进程PID image 这时,我们需要通过以下的方法来查看进程的详细信息: Linu ...

  9. [linux] 查看进程PID以及进程详细信息

    首先通过top查看进程PID: top无法查看到进程的详细信息,比如进程运行时所在的目录,以及执行程序的绝对路径等. 这时,我们需要通过以下的方法来查看进程的详细信息: Linux在启动一个进程时,系 ...

最新文章

  1. 细细讲述Java技术开发的那些不为人知的规则
  2. GraphQL:Descriptor Attributes
  3. O-C相关-08-动态类型与静态类型
  4. mongoDB中的聚合操作
  5. Java垃圾回收GC概览
  6. 微型计算机远程编程微软,用微软的云计算来远程管理自己的电脑
  7. java 十进制十六进制转换_Java进制转换之十六进制转十进制
  8. python统计数据指标的常见方法
  9. 计算机考研复试——数据库篇
  10. 生态愿景与险企数字化进度——保险科技生态建设
  11. html测试智商,iq测试题及答案 - 测智网 国内经典智商测试题
  12. 中易浏览器(enjoyie) v3.0.1.15 完整绿色版 免费
  13. iOS Camera照相机
  14. 在技术招聘中,HR 如何识别候选人的“味道”?
  15. ZBrush中的皮肤纹理该怎么添加
  16. 零基础也能学会的——用Python制作超级玛丽小游戏
  17. Sql执行平时都很快但是偶尔就会很慢
  18. OpenAI的创立和发展历程
  19. SNAT和DNAT原理及配置方法
  20. html5 表格 在线生成,专业的Web报表软件——在线表格生成制作工具

热门文章

  1. etcd 启动分析_grpc-go基于etcd实现服务发现机制
  2. 5G NGC — 系统架构
  3. 添加Altium Designer 3D封装
  4. MDK出现红叉,程序编译正常没有错误
  5. 颜色传感器TCS230的使用
  6. 京东架构师解析URL监控
  7. Centos6.x终端中文乱码
  8. 【WPF】对话框/消息弹窗
  9. BZOJ1946 : [Ceoi2006]ANTENNA
  10. 谢尔排序/缩减增量排序(C++)