从linux中的pid处理进程名称

时间:2013-03-21 10:47:44

标签: c linux process system pid

如何从他的pid获取进程名称? 例如,我执行cat file1.txt,但我想弄清楚cat命令及其参数,因为它在系统中的pid。是否有结构来确定它或类似的东西?有什么想法吗?

7 个答案:

答案 0 :(得分:25)

没有任何通用的方法来执行此unix。
每个操作系统都有不同的处理方式,有些方法非常难。你提到Linux了。使用Linux,信息位于/ proc文件系统中。
要获取进程ID 9999的命令行,请阅读文件/proc/9999/cmdline

答案 1 :(得分:13)

在Linux上,您可以查看/proc/。尝试输入man proc以获取更多信息。 /proc/$PID/cmdline的内容将为您提供运行$PID进程的命令行。还有/proc/self用于检查自己:)

另一种选择(例如在Mac OS X上)是使用libproc。请参阅libproc.h

答案 2 :(得分:10)

POSIX C不支持为通过PID获取进程名称提供标准API。

在linux中,您可以通过LINUX Proc API获取名称:/ proc / $ PID / cmdline。代码看起来像这样:

const char* get_process_name_by_pid(const int pid)
{
    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);
        }
    }
    return name;
}

答案 3 :(得分:9)

要获取进程ID的进程名称,请说9000使用此命令:

ps -p 9000 -o comm=

答案 4 :(得分:2)

虽然这个问题已得到解答,但我想加2美分。

就我而言,当流程PHP_BINARY通过1111创建流程22222时(至少这是我听到的),pipe没有提供正确的流程名称,但是而是给出/proc/2222/cmdline之类的东西。我必须使用1111_1来获取正确的进程名称。

答案 5 :(得分:0)

在Linux中使用以下命令

ls -l /proc/[pid]/exe

它将给出进程/应用程序名称的名称

答案 6 :(得分:0)

ps --pid <pid> -o comm h: 此命令提供可执行文件名。例如,如果您运行脚本name.sh,则以上命令将输出显示为bash

ps --ppid <pid> -o comm h: 此命令将输出显示为name