MacOSのJavaアプリケーション内から、Runtime.getRuntime().exec("open -Wn filename")
を使用してデフォルトアプリケーションでファイルを起動し、表示アプリケーション(pdfの場合はAdobeReaderなど)と呼ぶことができます。それはうまく動作します。MacOSのopenコマンドから起動されたアプリケーションプロセスからpidを取得
表示アプリケーション(たとえば、AdobeReader)を閉じるときに問題が発生します。
open
コマンド自体がjavaアプリケーションの子プロセスとして起動されますが、openコマンドは子プロセスではなく表示されたアプリケーションを子プロセスとして起動します(launchd(1)
)。その結果、Javaアプリケーションからプロセスを破壊すると、開いているプロセスだけが強制終了されますが、表示アプリケーションは終了しません。
これまでのところ、私は視聴アプリケーションプロセスのPIDを取得してそれを強制終了できませんでした。 ps
で私はアプリケーション名を持っているときにしか見つけることができませんが、それは私が持っていないものです。
誰もが私は
- は(
open
がの親プロセスではありません、覚えているアプリケーションの名前またはUTIを知らなくても、open
コマンドから起動されたアプリケーションのPIDを取得することができる方法のアイデアを持っています表示アプリケーション)?
または
- 起動されたアプリケーション
open
プロセスの子を作るので、私はopen
プロセスを殺すことによって、それを殺すことができますか?
または
- 他の可能な解決策?
あなたのアイデアは非常に高く評価されています。
:lsof -t filename
PIDを持つ、私はプロセスを強制終了することができ、表示アプリケーションを意味します