如何知道Linux机器上的进程PID

如何知道Linux机器上的进程PID

我正在从 java 启动安装程序以在 linux 上安装软件,我想知道它的“进程 ID 和图像名称”。

在 Windows 中,我可以使用tasklist命令获取它,但在 Linux 中我无法做到这一点。我尝试使用ps -efps -A命令,但它没有显示图像名称或进程的 PID。

有什么命令可以获取这些值吗?

答案1

大多数现代 Linux 发行版都有方便的命令pgrep进程 grep) 就是为此目的而创建的。使用方法如下:

pgrep -lf programname

与 naive 不同ps ax | grep programnamepgrep知道如何不显示其自身的进程 ID。

还有一个补充实用程序pkill,它可以通过名称杀死进程(或发送其他信号)。

答案2

如果它是图形安装程序,您可以在终端中运行此单行命令:

ps -fp $(xprop _NET_WM_PID | cut -d' ' -f3)

你的鼠标光标将变成十字线。现在单击相关窗口。你现在应该会看到终端中打印的进程信息。

答案3

尝试ps -aef | grep your_process_nameyour_process_name用您的安装程序名称替换。

希望这可以帮助 !!

答案4

看来您正在寻找以 Linux 为中心的解决方案,而不是可移植的解决方案。在 Linux 上,从 Java 获取所需信息的简单、高效且可靠的方法是使用文件系统proc,尤其是/proc/self目录。man 5 proc手册页描述了每个文件。

pid的第一个字段/proc/self/stat。图像名称是 的第二个字段。

编写一个类来包装这些调用非常容易。只需几行代码即可完成基本 IO:快速而强大。使用第三方程序很难做到正确,而且效率较低。

此解决方案不可移植,因为大多数 Unix 系统没有proc文件系统。在我看来,从最好到最差,您有四个选择:

  • 在开始流程之前获取所需的信息:这可能很容易,也可能很难,这取决于你的应用程序
  • 查找清洁和系统特定的实现,例如procLinux 的文件系统
  • 使用未指定的 API。RuntimeMXBean.getName()通常返回pid,您也可以使用反射来访问java.lang.UnixProcess.pid。实现可能因 JVM 而异,并且可能随时更改。如果您控制环境,则可以接受解决方案。
  • 编写本机代码来访问 POSIX API
  • 使用外部工具如ps

如果您决定依赖外部工具,那么您应该非常小心可移植性(两个操作系统之间的选项和输出可能有很大差异)和区域设置。

相关内容