我怎样才能得到它工作的PID号和文件夹?
如果我在不同的文件夹中运行 2 个相同的程序:
/var/www/public_html/first_folder/test.jar <i>(it runs all the time)</i>
/var/www/public_html/second_folder/test.jar <i>(it runs all the time)</i>
如果我运行这个命令ps aux | grep test.jar
结果:
www-data 3766 0.5 3.8 2959916 75616 ? Sl 15:01 0:13 java -jar test.jar
www-data 4239 3.4 4.1 2959916 82432 ? Sl 15:31 0:18 java -jar test.jar
我不知道它是哪个 PID — 第一个文件夹或第二个。
在 Linux 上,您可以在
/proc/$pid/cwd
. 这是一个指向工作目录的神奇符号链接。/proc/$pid/cmdline
给出进程的命令行,但它用 NUL 字节分隔,因此需要一些处理。您可以执行类似这样的操作来获取与某些pgrep
条件匹配的多个程序的工作目录和命令行:当然,如果您已经使用 eg 查找了 PID
ps
,ls -l /proc/<PID>/cwd
则readlink /proc/<PID>/cwd
可以这样做。您也可以使用
lsof
,但我不知道如何让它显示程序的命令行参数。在 FreeBSD 上,这同样可以通过
fstat
命令获得,尽管获取实际路径有点棘手和缓慢:解释
pgrep pattern
- 查看当前正在运行的进程并列出与模式匹配的进程 ID。pwdx
- 报告进程的当前工作目录。测试
lsof
你的朋友在这里吗:第二列显示 PID。