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

如何在被OpenMPI prun调用的C程序中获取全部命令行参数

重要提示

我发现该问题至少部分与我使用的特定计算集群相关,因为prun似乎与SLURM存在某种结合,但它仍可能对OpenMPI的prun通用使用具有参考价值。

问题

我希望在C程序中创建一个字符串数组,其元素为调用该C程序的prun命令的全部命令行参数。具体场景如下:

# prun调用C程序
prun -v -<可变核心数> \
  -np <可变计算节点数> \
  <prun的其他参数> \
  ./name_of_c_program <C程序的参数>

因此,在name_of_c_program.c中,我希望能够访问如下内容:

// C程序应能访问全部命令行参数(包括prun的参数)
int main(int argc, char **argv){
  all_cmd_line_args = get_all_cmd_line_args();
  // all_cmd_line_args = {"prun", "-v", ...}
}

我已知默认情况下,argv的第一个元素是程序名(即name_of_c_program),后续元素则是上述代码块中<C程序的参数>部分的内容。

关于prun的说明

根据prun的文档,它似乎会设置一些环境变量。或许可以在C程序中访问这些环境变量来获取prun的选项,prun用于执行串行和并行作业,调用格式为:prun [ options ] <program> [ <args> ]。

当前(可能仅适用于特定环境)的解决方案

我认为这并非通用方案,但发现在我使用的特定集群中,prun命令会为所有进程设置环境变量,并将这些变量存储在名称符合.PRUN_ENVRIONMENT*模式的临时文本文件中。要获取"PRUN_CPUS=<CPU数量>"这类信息,只需读取该临时文件并将结果存储到C程序的变量中即可。

内容的提问来源于stack exchange,提问作者Jared

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:01:28