linux c 通过 pid 获取 进程相关信息 cmdline
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相关推荐
- muduo:获取进程相关信息
muduo里面有专门获取进程信息的类,记录一下. // Use of this source code is governed by a BSD-style license // that can b ...
- 【C函数】sysinfo获取系统相关信息
Linux中,sysinfo是用来获取系统相关信息的结构体,返回系统的统计信息. 头文件: #include <sys/sysinfo.h> 函数声明: int sysinfo (stru ...
- SSH初探:通过查看GPU的PID获取USER详细信息
笔者课题组公用服务器,有时候遇到长时间训练占用GPU的情况,可以通过查看GPU的PID获取USER详细信息,从而沟通协商GPU的使用. watch -n 1 nvidia-smi 上面这个指令在Lin ...
- youtube根据vedioId获取视频相关信息
根据vedioId获取视频相关信息 https://www.googleapis.com/youtube/v3/videos?key=xxx&id=I6uBoYJxf4k&part=s ...
- 7.3 Uipath UiPath之获取邮件相关信息
UiPath之获取邮件相关信息 UiPath之获取邮件相关信息 第一步:先看看GetOutLookMailMessage这个应该怎么设定 第二步:新建一个Execl Application Scope ...
- 金蝶EAS登录获取用户相关信息失败、EAS默认用户名、密码
1.sql2005,新装的EAS7.0服务器,新建一个帐套,都弄好了以后,客户端登陆的时候提示错误:获取用户相关信息失败! 日志里说该游标未声明 解决方法:在SQL SERVER执行alter ta ...
- adb 查看屏幕大小_adb shell wm 命令获取屏幕相关信息
adb shell wm命令获取屏幕相关信息 Tags: adb_shell wm命令在4.x才有的,不同的版本下部分参数不同 wm [subcommand] [options] 获取屏幕大小:wm ...
- Linux通过PID查看进程完整信息
说明 通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等. 先通过top查看进程PID image 这时,我们需要通过以下的方法来查看进程的详细信息: Linu ...
- [linux] 查看进程PID以及进程详细信息
首先通过top查看进程PID: top无法查看到进程的详细信息,比如进程运行时所在的目录,以及执行程序的绝对路径等. 这时,我们需要通过以下的方法来查看进程的详细信息: Linux在启动一个进程时,系 ...
最新文章
- 细细讲述Java技术开发的那些不为人知的规则
- GraphQL:Descriptor Attributes
- O-C相关-08-动态类型与静态类型
- mongoDB中的聚合操作
- Java垃圾回收GC概览
- 微型计算机远程编程微软,用微软的云计算来远程管理自己的电脑
- java 十进制十六进制转换_Java进制转换之十六进制转十进制
- python统计数据指标的常见方法
- 计算机考研复试——数据库篇
- 生态愿景与险企数字化进度——保险科技生态建设
- html测试智商,iq测试题及答案 - 测智网 国内经典智商测试题
- 中易浏览器(enjoyie) v3.0.1.15 完整绿色版 免费
- iOS Camera照相机
- 在技术招聘中,HR 如何识别候选人的“味道”?
- ZBrush中的皮肤纹理该怎么添加
- 零基础也能学会的——用Python制作超级玛丽小游戏
- Sql执行平时都很快但是偶尔就会很慢
- OpenAI的创立和发展历程
- SNAT和DNAT原理及配置方法
- html5 表格 在线生成,专业的Web报表软件——在线表格生成制作工具