进程名称来自其在 linux 中的 pid

Posted

技术标签:

【中文标题】进程名称来自其在 linux 中的 pid【英文标题】:Process name from its pid in linux 【发布时间】:2013-03-10 20:00:47 【问题描述】:

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

【问题讨论】:

Get process name by PID 的可能重复项 【参考方案1】:

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

【讨论】:

要获取进程 ID 9999 的进程名称,请读取文件 /proc/9999/comm 问题是如何获取进程名称,而不是命令行。在我的 SUSE 上,我为 kwrite 进程输入“head /proc/9999/cmdline”,它返回:“kdeinit4: kwrite [kdeinit]”。如果我使用 /comm 而不是 /cmdline 我会得到正确的结果:'kwrite'。 /proc/$pid/comm 似乎将输出修剪为 15 个字符。这非常……非常糟糕……【参考方案2】:

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

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

【讨论】:

你能告诉我你的答案和我的不同吗? :) 当我开始写我的答案时,你的答案并不存在 :)【参考方案3】:

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;

【讨论】:

如果您来这里是在寻找使用单声道的 C# 解决方案,那么请看一下:***.com/questions/29827331/…【参考方案4】:

要获取进程 ID 的进程名称,比如 9000,请使用以下命令:

ps -p 9000 -o comm=

【讨论】:

【参考方案5】:

这个问题已经得到解答,我想加我的 2 美分。

在我的例子中,当进程1111 通过pipe 创建进程22222(至少这是我听到的),/proc/2222/cmdline 没有给出正确的进程名称,而是给出了类似1111_1 的名称。我必须使用/proc/2222/comm 来获取正确的进程名称。

【讨论】:

【参考方案6】:

在 Linux 中使用以下命令

ls -l /proc/[pid]/exe

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

【讨论】:

【参考方案7】:

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

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

【讨论】:

以上是关于进程名称来自其在 linux 中的 pid的主要内容,如果未能解决你的问题,请参考以下文章

Linux运维必知:如何从其 PID 中查找进程名称

Linux基本命令之pidof和kill/killall

如何获取linux下的进程pid列表

Linux 查找指定名称的进程并显示进程详细信息

如何在给定进程名称的情况下获取 pid

Linux中如何查看进程和控制进程