【问题标题】:linux how to get process params with pid?linux如何使用pid获取进程参数?
【发布时间】:2016-03-07 10:05:43
【问题描述】:

当我执行程序./test -debug 7 -m player时,我用C语言如何获取-m -debug的参数值?

我试过了:

char* name = (char*)calloc(1024,sizeof(char));
if(name){
    sprintf(name, "/proc/%d/cmdline",pid);
    FILE* f = fopen(name,"r");
    if(f){
        size_t size;
        size = fread(name, sizeof(char), 1024, f);
        if(size>0){
            if('\n'==name[size-1])
                name[size-1]='\0';
        }
        fclose(f);
    }
}

但它只返回进程的名称。exec "xargs -0

【问题讨论】:

  • 对不起,我想进入另一个进程,而不是进入该进程的main方法。
  • 您能否通过示例提供有关您的问题的更多详细信息。您是否要在程序 y 中获取传递给程序 x 的参数?
  • 好的,我更新问题。

标签: c linux


【解决方案1】:

来自proc(5)

命令行参数在此文件中显示为一组字符串 由空字节 ('\0') 分隔,后面还有一个空字节 最后一个字符串。

所以,这段代码应该可以工作:

for (i = 0; i < size; i++) {
    if (!i)
        printf("%s\n", name);
    else if (!name[i - 1])
        printf("%s\n", name + i);
}

【讨论】:

  • 我在 size = fread(name, sizeof(char), 1024, f) 之后尝试过,但只返回“./test”。
  • 它真的只返回“./test”,还是返回“./test”后跟一个空字节后跟更多数据,但您只看到“./test”,因为您打印了用 printf 吗?
  • 是的,我用 printf 打印出来的,怎样才能得到正确的值?
猜你喜欢
  • 2011-07-11
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多