在服务器上查找正在运行的 Java 程序的 JAR 包位置,可以通过以下方法:
1. 通过进程信息查找
-
获取 Java 进程的 PID:在 Linux 服务器上,可以使用以下命令查找 Java 进程的 PID:
bash复制
ps -ef | grep java
或者使用更精确的命令:
bash复制
pgrep -f java
-
查找 JAR 包路径:找到 Java 进程的 PID 后,可以通过以下命令获取其工作目录:
bash复制
ps -p <PID> -o cwd=
如果输出为 -,说明工作目录未正确报告,可以尝试:
bash复制
ls -l /proc/<PID>/cwd
这会显示一个符号链接,指向实际的工作目录。
-
在工作目录中查找 JAR 文件:使用 find 命令在工作目录中查找 JAR 文件:
bash复制
find /path/to/jar/directory -name "*.jar"
2. 通过命令行参数查找
-
如果 Java 程序是通过命令行启动的,可以查看启动时的命令行参数。在 Linux 上,可以使用以下命令:
bash复制
ps -ef | grep java
或者:
bash复制
cat /proc/<PID>/cmdline
这会显示启动 Java 程序时的完整命令行参数,从中可以找到 JAR 包的路径。
3. 使用 Java 代码获取
如果你有权限访问 Java 程序的代码,可以在程序中添加以下代码来输出 JAR 包的路径:
java复制
String jarPath = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
System.out.println("JAR包位置: " + jarPath);
4. 在 Windows 服务器上查找
-
获取 PID:使用以下命令查找 Java 进程的 PID:
bash复制
tasklist /FI "IMAGENAME eq java.exe"
-
查找 JAR 包路径:使用 PowerShell 脚本根据 PID 查找 JAR 包路径:
powershell复制
function Get-JarPathByPID {
param (
[int]$PID
)
$process = Get-Process -Id $PID
$commandLine = (Get-WmiObject Win32_Process | Where-Object { $_.ProcessId -eq $PID }).CommandLine
if ($commandLine -match "-jar\\s+([^\\s]+)") {
return $matches[1]
} else {
return "未找到 Jar 包路径"
}
}
$pid = 1234 # 替换为实际的 PID
$jarPath = Get-JarPathByPID -PID $pid
Write-Host "Jar 包路径为: $jarPath"
通过以上方法,你可以快速定位服务器上运行的 Java 程序的 JAR 包位置。
评论前必须登录!
注册