如何使用C语言读取指定PID单个进程的所有环境变量
按PID筛选openproc读取进程的实现方法
你当前代码读取全量进程是因为openproc默认没有加PID筛选参数,要指定PID需要做两处修改:
- 给
openproc的第一个flag参数新增PROC_PID标记,和原有PROC_FILLENV按位或组合 - 构造需要筛选的PID数组,数组末尾以0作为终止标识,作为第二个参数传入
openproc
说明:
PROC_PID参数会限制readproc仅返回PID数组中指定的进程信息,不会遍历全量进程。
修正后的完整代码示例
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <proc/readproc.h> #include <sys/types.h> // 用于pid_t类型定义 int main(){ // 替换成你要筛选的目标PID,数组最后必须加0结束 pid_t target_pids[] = {1234, 0}; // 传入PROC_PID标记和PID数组 PROCTAB* proc = openproc(PROC_FILLENV | PROC_PID, target_pids); proc_t proc_info; char **env; memset(&proc_info, 0, sizeof(proc_info)); while (readproc(proc, &proc_info) != NULL) { printf("进程PID: %d\n", proc_info.tgid); printf("进程环境变量列表:\n"); // environ是字符串数组,需要遍历输出所有环境变量 for (env = proc_info.environ; *env != NULL; env++) { printf(" %s\n", *env); } } closeproc(proc); return 0; }
注意事项
- 如果你需要同时筛选多个PID,直接在数组里追加PID即可,比如
pid_t target_pids[] = {1234, 5678, 9012, 0}; - 若指定的PID不存在,
readproc会直接返回NULL,无返回结果时可先确认目标PID是否处于运行状态 proc_t结构里的environ内存不需要手动释放,调用closeproc时会自动回收相关资源
内容的提问来源于stack exchange,提问作者Tombart
相关产品推荐
相关产品推荐

