【问题标题】:printing process info through reading proc/<pid>/status通过读取 proc/<pid>/status 打印进程信息
【发布时间】:2016-04-23 21:03:22
【问题描述】:

我正在尝试从 proc//status 读取进程信息,我打算首先检查进程是否正在运行,然后如果它正在运行,我将显示它的名称,我存储以“名称: " 在一个名为 prev 的字符串中,那么如果进程正在运行,我应该通过这个 prev 打印它的名称,但是会发生的是 prev 被我认为的另一个值覆盖。这是我的代码:`

char path[40], line[100], *p;
FILE* statusf;

snprintf(path, 40, "/proc/%ld/status", tgid);

statusf = fopen(path, "r");
if(!statusf)
    return;

char * prev;

while(fgets(line, 100, statusf)) {
if (strncmp(line,"Name:", 5) == 0){
   prev = line;
   continue;
}

    if(strncmp(line, "State:", 6) == 0){
    // Ignore "State:" and whitespace
    p = line + 7;
    while(isspace(*p)) ++p;
if(p[strlen(p)-1] == '\n'){
    p[strlen(p)-1] = '\0';
}
}

if (!strcmp(p,"R (running)")){
    prev = prev + 6;
    while(isspace(*prev)) ++prev;
if(prev[strlen(prev)-1] == '\n'){
    prev[strlen(prev)-1] = '\0';
}

printf("%s",prev);
}

break;

}
fclose(statusf);

} `

【问题讨论】:

    标签: c linux ubuntu


    【解决方案1】:
    char path[40], line[100], *p;
    char * prev;
    
    while(fgets(line, 100, statusf)) {
    if (strncmp(line,"Name:", 5) == 0){
       prev = line;
       continue;
    }
    

    prev 现在将指向行。所以当 line 的内容发生变化时,变化也会出现在 prev 中,因为 prev 指向与 line 相同的内存

    【讨论】:

    • 你有什么建议?
    • char line[100], prev[100]; if (match) {strcpy (prev, line);}
    猜你喜欢
    • 1970-01-01
    • 2015-12-15
    • 2013-02-05
    • 2019-03-13
    • 2017-12-31
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多