2010-02-01 13:48:15 +0000 2010-02-01 13:48:15 +0000
99
99

如何知道运行进程的绝对路径?

如果我在磁盘上有多个相同应用程序的副本,并且只有一个在运行,就像我用ps看到的那样,我怎样才能知道绝对的路径来区分它和其他应用程序?

答案 (8)

117
117
117
2010-02-01 17:04:22 +0000
% sudo ls -l /proc/PID/exe

eg:

% ps -auxwe | grep 24466 root 24466 0.0 0.0 1476 280 ? S 2009 0:00 supervise sshd % sudo ls -l /proc/24466/exe lrwxrwxrwx 1 root root 0 Feb 1 18:05 /proc/24466/exe -\> /package/admin/daemontools-0.76/command/supervise
```。
21
21
21
2013-05-03 06:48:17 +0000

使用:

pwdx $pid

这给出了pid的当前工作目录,而不是其绝对路径。

通常which命令会告诉你从shell中调用的是哪个:

#> which vlc
/usr/bin/vlc
```。
14
14
14
2010-02-01 13:58:59 +0000

一种方法是ps -ef

4
4
4
2010-02-01 13:53:01 +0000
3
3
3
2017-10-09 15:49:14 +0000

lsof是一个选项。你可以试试像下面这样的方法。

lsof -p PROCESS_ID

这将列出所有被进程打开的文件,包括可执行文件的实际位置。然后可以再添加一些awk、cut、grep等命令来找出你要找的信息。

举个例子,我执行了以下命令来确定我的 “java "进程来自哪里:

lsof -p 12345 | awk ‘{print $NF}’ | grep ‘java$'。

2
2
2
2010-02-01 14:45:10 +0000

快速的答案是使用 ps 与选项或 /proc 文件系统信息。这通常会有效,但不能保证。一般来说,没有明确的、有保证的答案。例如,如果正在执行的文件在执行过程中被删除,从而没有文件的路径,怎么办?

查看 Unix FAQ 来了解更多细节,尤其是问题4.3和4.4。

2
2
2
2016-04-27 23:28:20 +0000

为什么大家都希望你知道PID?这里有一个人性化的方法:

pwdx `pgrep ###process_name###`
```。
0
0
0
2016-03-05 11:35:41 +0000

你可以使用

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

来获取绝对路径。PID是过程。