如果我知道一个进程的 PID 号,我怎样才能得到它的名字?

And*_*ili 324 linux unix shell process pid

如果我有一个进程的 PID 号(在 UNIX 机器上),我怎样才能找到其关联进程的名称?

我需要做什么?

slh*_*hck 355

在所有符合 POSIX 的系统和 Linux 上,您可以使用ps

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

在这里,进程由其 PID 选择-p。该-o选项指定输出格式,comm即命令名称。

对于完整命令,而不仅仅是程序名称,请使用:

ps -p 1337 -o command
Run Code Online (Sandbox Code Playgroud)

另请参阅:ps– The Open Group Base Specifications Issue 6

  • comm 似乎将命令截断为 15 个字符。使用 `command` 来修复它。 (38认同)
  • 实际上,`comm` 给出了二进制文件的名称,`command` 返回参数 0 (3认同)

Sto*_*rux 59

您可以从以下位置找到 process-id 或 pid 使用的进程名称或命令

/proc/<pid>/cmdline
Run Code Online (Sandbox Code Playgroud)

通过做

cat /proc/<pid>/cmdline
Run Code Online (Sandbox Code Playgroud)

这里 pid 是您要为其查找名称的 pid
例如:

 # ps aux

   ................
   ................
   user  2480  0.0  1.2 119100 12728 pts/0  Sl   22:42   0:01 gnome-terminal
   ................
   ................
Run Code Online (Sandbox Code Playgroud)

要查找 pid 2480 使用的进程名称,您可以使用

# cat /proc/2480/cmdline 

 gnome-terminal
Run Code Online (Sandbox Code Playgroud)

  • 小心:OP 提到了 UNIX。并非所有 UNIX 都像特定于进程的文件一样实现计划 9。您的回答通常仅适用于 Linux。 (14认同)
  • 虽然这是真的,但他们确实将问题标记为“linux”。任何使用非基于 Linux 的 UNIX 操作系统的人都会习惯于修改答案以满足他们的需要 (5认同)

Ped*_*ito 18

要使用某个 pid 获取程序的路径,您可以使用:

ps ax|egrep "^ [PID]"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

或者,您可以使用:

ps -a [PID]
Run Code Online (Sandbox Code Playgroud)

或者也:

readlink /proc/[PID]/exe
Run Code Online (Sandbox Code Playgroud)


小智 11

您可以使用 pmap。我正在搜索 PID 6649。并切断额外的进程细节。

$ pmap 6649 | head -1
6649:   /usr/lib64/firefox/firefox
Run Code Online (Sandbox Code Playgroud)


小智 9

# ls -la /proc/ID_GOES_HERE/exe
Run Code Online (Sandbox Code Playgroud)

例子:

# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai  5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop
Run Code Online (Sandbox Code Playgroud)

  • 可能更好:`readlink /proc/1337/exe`。readlink - 打印解析的符号链接或规范文件名。 (3认同)