从linux中的pid处理进程名称

The*_*den 28 c linux pid system process

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

Anu*_*hab 26

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

  • 要获取进程ID 9999的进程名称,请读取文件`/ proc/9999/comm`. (11认同)
  • @SkippyleGrandGourou `/proc/<PID>/comm` 如果达到 16 个字符或 TASK_COMM_LEN 将被截断,更好的方法是读取 `/proc/<PID>/exe` 的 `realpath`,如下所示 [此处](https ://unix.stackexchange.com/a/629871/505340) (2认同)

rob*_*e_c 14

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

可以使用替代方案(例如在Mac OS X上)libproc.请参见libproc.h.

  • 当我开始写我的时候你的答案不存在:) (12认同)
  • 嘿,不要打架;)感谢你们每一个人 (2认同)

QJG*_*Gui 11

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;
}
Run Code Online (Sandbox Code Playgroud)


Thu*_*der 10

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

ps -p 9000 -o comm=
Run Code Online (Sandbox Code Playgroud)