从它在Linux进程的PID名称(Process name from its pid in linu

2019-07-22 08:18发布

如何从他的PID进程名称? 比如我执行猫FILE1.TXT,但我想,因为它在系统中的PID弄清楚,猫命令及其参数。 是否有一个结构,以确定它或类似的东西? 任何的想法?

Answer 1:

还有就是不要做任何UNIX的一般方式。
每个操作系统都有不同的方式来处理它,有些是很辛苦。 你尽管提Linux操作系统。 对于Linux,该信息是在/ proc文件系统。
要获取进程ID 9999的命令行,读取文件/proc/9999/cmdline



Answer 2:

在Linux上,你可以看看在/proc/ 。 试着输入man proc以获取更多信息。 的内容/proc/$PID/cmdline会给你进程的命令行$PID与运行。 还有/proc/self审查自己:)

另一种(例如,在Mac OS X)是使用libproc 。 见libproc.h 。



Answer 3:

POSIX C不支持给出一个标准API,用于通过PID获得进程名。

在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;
}


Answer 4:

为了得到一个进程ID的进程名说9000,使用这个命令:

ps -p 9000 -o comm=


Answer 5:

虽然这个问题已经回答了,我想补充我的2美分。

在我的情况下,当过程1111创建过程22222通过pipe (至少这是我听到的) /proc/2222/cmdline不给正确的进程名称,而是给出了类似1111_1 。 我要使用/proc/2222/comm以获得正确的进程名。



Answer 6:

使用在Linux下面的命令

ls -l /proc/[pid]/exe

它会给进程/应用程序名称的名称



文章来源: Process name from its pid in linux