2013-08-17 07:12:47 +0000 2013-08-17 07:12:47 +0000
280
280

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

如果我知道一个进程的PID号(在UNIX机器上),怎么才能知道它的相关进程的名字?

我该怎么做?

答案 (10)

308
308
308
2013-08-17 08:21:51 +0000

在所有兼容POSIX的系统中,以及在Linux系统中,可以使用ps

ps -p 1337 -o comm=

&001 这里,通过进程的PID选择-p-o选项指定了输出格式,comm表示命令名称。ps - Open Group Base Specifications issue 6 ](http://pubs.opengroup.org/onlinepubs/009696799/utilities/ps.html)

53
53
53
2013-08-17 08:04:46 +0000

你可以从

/proc/pid/cmdline
cat /proc/pid/cmdline

中找到进程名或进程ID或pid所使用的命令,可以通过做

# ps aux

   ................
   ................
   user 2480 0.0 1.2 119100 12728 pts/0 Sl 22:42 0:01 gnome-terminal
   ................
   ................

,这里的pid是你要找的进程名 的pid,对于exmaple:

# cat /proc/2480/cmdline 

 gnome-terminal

要找到pid 2480所使用的进程名,可以用

&001

15
15
15
2015-04-18 02:16:04 +0000
8
8
8
2017-05-27 04:28:29 +0000

你可以使用pmap。我搜索的是PID 6649。并剪掉多余的过程细节。

$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
8
8
8
2016-05-06 00:14:20 +0000
# ls -la /proc/ID_GOES_HERE/exe

例子:

# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai 5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop
3
3
3
2015-08-30 23:31:50 +0000

类似于slhck的答案,但依赖文件操作而不是命令调用:

MYPID=1
cat "/proc/$MYPID/comm"
3
3
3
2013-08-17 09:32:59 +0000

你也可以用awk与ps

ps aux | awk '$2 == PID number for a process { print $0 }'

结合使用,例如:

root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init

打印head line,你可以用

ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'

                 (or) 

 ps --headers aux |head -n 1; ps aux | awk '$2 == 1 { print $0 }'

root@cprogrammer:~# ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init
2
2
2
2016-02-23 21:47:17 +0000

令人惊讶的是,没有人提到ps的-f(完整命令)选项。我喜欢把它和 -e (everything)一起使用,然后把结果管到grep,这样我就可以缩小搜索范围。这将显示传递给该命令的选项和参数。

0
0
0
2016-11-21 09:48:46 +0000

我觉得最简单的方法是用下面的命令:

ps -awxs | grep pid
0
0
0
2016-12-26 15:08:43 +0000