在 macOS 上的 Java 应用程序中,我使用 Runtime.getRuntime().exec("open -Wn filename")
启动一个文件及其默认应用程序,我们称之为查看应用程序(例如用于 pdf 的 AdobeReader)。那很好用。
当我想关闭查看应用程序(例如 AdobeReader)时,我的问题出现了。
问题是,open
命令本身作为 java 应用程序的子进程启动,但 open 命令启动查看应用程序不是作为子进程,而是作为 启动(1)
。结果,当我从 Java 应用程序销毁进程时,只有打开的进程被杀死,而不是查看应用程序。
到目前为止,我无法设法获取查看应用程序进程的 PID 以终止它。使用 ps
我只能找到它,当我有应用程序名称时,但这正是我所没有的,因为我想让操作系统决定查看应用程序。
有没有人知道我该怎么做
- 获取从
open
命令启动的应用程序的 pid,不知道应用程序名称或 UTI(记住,open
不是查看的父进程申请)?
或
- 让启动的应用程序成为
open
进程的子进程,这样我就可以通过终止open
进程来终止它?
或
- 还有其他可能的解决方案吗?
非常感谢您的想法。
最佳答案
我通过从 lsof
命令获取 pid 找到了一个解决方案,因为我知道文件名:
lsof -t 文件名
有了 pid,我可以终止进程,意味着查看应用程序:
kill $(lsof -t 文件名)
完整的解决方案如下所示:
String killCommand = "kill $(lsof -t " + filename+ ")";
ProcessBuilder builder = new ProcessBuilder("bash", "-c", killCommand);
builder.start();
不是很漂亮,但它完成了工作。
关于macos - 从 macOS 上的打开命令启动的应用程序进程获取 pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41242971/