You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:54:03