32

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

4

7 回答 7

29

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

于 2013-03-21T10:56:05.850 回答
16

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

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

于 2013-03-21T11:00:49.850 回答
15

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;
}
于 2014-03-06T03:32:52.910 回答
13

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

ps -p 9000 -o comm=
于 2014-09-08T06:00:27.510 回答
2

虽然已经回答了这个问题,但我想加上我的 2 美分。

就我而言,当进程通过(至少这是我听到的)1111创建进程时,不会给出正确的进程名称,而是给出类似. 我必须使用来获得正确的进程名称。22222pipe/proc/2222/cmdline1111_1/proc/2222/comm

于 2016-02-17T15:13:55.513 回答
2

在 Linux 中使用以下命令

ls -l /proc/[pid]/exe

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

于 2019-04-29T12:29:46.967 回答
1

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

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

于 2019-12-11T06:11:00.720 回答