Java特定プロセス名取得方法

このQ&Aのポイント
  • Javaで特定のプロセス名を取得する方法について調査しました。
  • 特定のプロセス名を取得するためには、Javaのプロセス管理機能を使用する必要があります。
  • プロセス名を取得することで、プロセスの状態や動作を監視することができます。
回答を見る
  • ベストアンサー

Java 特定プロセス名前取得方法について

Java 特定プロセス名前取得方法について こんにちわ。 昨日に引続きまた質問させてください。 Javaで特定のプロセス名(OpenOfficeのプロセス名:soffice.exeだったかな?)を取得したいのですが、何か良い方法は無いでしょうか? 環境 eclipse3.5 jdk1.5 jooconverter.jar openoffice1.4 やりたいこと ・ExcelからPDFにファイル内容を丸ごと変換(jooconverter.jar、openofficeを使用) ・どうやら、openofficeのコネクタを取得しなければ、変換出来ない為Thrad.sleep()で若干とめてます。 ・その止めるのを毎回ではなく、1日1回若しくはopenofficeが起動していない時だけにしたいのです。 こんな感じでやりたい ~中略~ // プロセス名取得 String pName = …; // openofficeが起動しているかのチェック if (pName.equals("")) {     // openoffice起動     ~中略~ // 処理を一旦停止         Thread.sleep(60000); } // コネクト接続処理 ~中略~ // 変換処理 ~中略~ 補足 何故プロセスIDではないかというと、ネットで調べたら固定ではなく、毎回変動するようなので名前がいいなーと思いました。 もし、変動ではなく固定にすることが出来るなら、IDも可能です。 どなたか分かる方、ご教授頂けましたら幸いです。

  • Java
  • 回答数3
  • ありがとう数12

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class ProcessGetter { //プロセス表示コマンド(Windows) //mainで使うために、やむを得ずのstatic private final static String PS_COMMAND = "tasklist"; //ProcessBuilderにプロセス表示コマンド登録 //mainで使うために、やむを得ずのstatic private final static ProcessBuilder psbuilder = new ProcessBuilder(PS_COMMAND); //mainで使うために、やむを得ずのstatic private final static List<String> list = new ArrayList<String>(); /* * 実行中のプロセスを返す */ public static List<String> getProcess(){ try { //コマンド実行 Process p = psbuilder.start(); //コマンドのコンソール表示を受け取る BufferedReader bufreader = new BufferedReader (new InputStreamReader(p.getInputStream())); //ArrayListに突っ込みまくる while (true) { String tasks = bufreader.readLine(); list.add(tasks); //コマンドライン表示終了時にストリームをクローズ int c = p.getInputStream().read(); if (c == -1) { p.getInputStream().close(); break; } } return list; } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); }finally{ return list; } } public static void main(String[] args) { List<String> pslist = getProcess(); for(String str : pslist) { System.out.println(str); } } }

akito0417
質問者

お礼

回答ありがとう御座います。 せっかくサンプルソースを頂いたのですが、リーダに「変な事するな」といわれてしまいました・・・。 また別の機会に試してみたいと思います。

その他の回答 (2)

回答No.3

長くなったので分けました 下記に投稿したコードを実行すると、 ?C???[?W?? PID ?Z?b?V?????? ?Z?b?V????# ???????g?p?? ========================= ======================= =========== ============ ystem Idle Process △△△△△ 0 △Services △△△△△ 0△△△△△△ 24 K ystem △△△△△ 4△ Services △△△△△ 0 △△△△△△ 5,176 K mss.exe △△△△△ 456 △Services△△△△△0△△△△△△752 K ↑の実行結果が得られます。(△はスペース) ※文字化け&プロセス名が欠けちゃってますね・・・  実際に使うのであれば、申し訳ありませんが、自力で何とかして下さい。 Unix/Linuxの場合はPS_COMMANDに"ps"を指定して下さい。 あとはsplitするなりなんなりすれば、プロセス名が取得できると思います。 酔った頭でテキトーに書いたサンプルコードですので、 まともに動かなくてもご了承の程お願い致します。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

外部プログラムを経由して取得する方法しか知らないわ。 C#とかで取得したものをJavaに渡すといいわ。 VBScriptでもできたかも? ところで気になったのだけど 実行時にopenofficeが起動していなくても 実行中にopenofficeが起動したらどうなっちゃうのかしら。

akito0417
質問者

お礼

回答ありがとう御座います。 外部プログラムですか・・・。 >実行時にopenofficeが起動していなくても >実行中にopenofficeが起動したらどうなっちゃうのかしら。 これって、どういう事ですかね? 待機させてる間に起動しきれず、次の処理実行中にopenofficeが起動したらってことですかね・・・ 上記仮説だとして回答します。 待機させた後に、openofficeのコネクタを接続し、コンバータを取得します。 起動しきれない=コネクタ接続できない為、エラーで処理が異常終了するようにしてます。 起動しきれない=待機時間が短いって事だと思うので、設定ファイルの待機時間を増やして再実行(ユーザが)という形を取りました。 こういう感じにって指示を頂いたので。(リーダから)

関連するQ&A

  • 特定ユーザーのプロセス情報を取得するには

    こんにちは。 VB.NET 2003で、現在起動されている全プロセスから、 特定のユーザーが起動した ・プロセスID ・プロセス名称 の情報を取得する方法はありますでしょうか? System.Diagnostics.Process.GetProcessesで、 プロセス情報が取得できるので、 その中から、特定のユーザーの情報だけを洗い出そうとしたのですが、 ユーザー名に当たるプロパティが見つけられませんでした。 Process クラスには、ユーザー名は持っていないのでしょうか? よろしくお願いいたします。

  • プロセスIDの取得方法 

    Unix C++でプロセスIDの取得方法を教えてください。 (見当違いの質問だったらすみません) 親プロセス(自分)のプロセスIDと、親プロセスの起動した子プロセスのプロセスIDを取得したいです。 また、親プロセスの起動した子プロセスのプロセスIDを使って親プロセス終了時に子プロセスをkillしたいと思うのですが、 具体的にどうすればいいかわからず困っています。

  • プロセスIDの取得方法について

    下に同様の質問をしたのですが、削除方法分からない為、再度質問させていただきまし。 VB5.0を利用しています。 VBで書いたexeを実行した際に、そのプロセスID(自分の)は、GetCurrentProcessIdを利用すれば取得できると分かりました。 が、プログラム内でExcelを下記の様にオブジェクトを作成した場合、そのプロセスIDをどうやって取得すればいいのでしょうか? ご存知の方居ましたら、教えて下さい。 Set ExcelObj = CreateObject("Excel.Application") ここで起動?されたExcelのプロセスIDを取得したいのですが。

  • サーバ内のプロセスを取得するには?

    こんにちは! VB.netでサーバで起動しているexeを、ローカルから停止したいのですが、肝心のサーバ内のプロセスIDを取得できません・・・ System.Diagnostics.Processはローカルのプロセスしか取得できないのでしょうか? どなたかネットワーク全体のプロセスを取得できるコードをご存知でしたら、教えて下さいm(_ _)m よろしくお願い致します。

  • 他のコンピュータのプロセスを取得

    VB2005Expressにて開発しています。 他のコンピュータで実行中のプロセスを取得したいと思っています。 Dim ps As System.Diagnostics.Process() = _ System.Diagnostics.Process.GetProcesses("プロセス名","192.168.XXX.XXX") で指定したコンピュータからプロセスは取得することは出来ました。 ただ、特定のコンピュータだけ「リモート コンピュータに接続できませんでした。」というエラーが出てしまいます。 プログラムの実行環境のID、パスワードと特定のコンピュータの IDとパスワードが異なっているのが原因だと思っています。 GetProcessesにIDとパスワードを設定してプロセスを取得することは 可能なのでしょうか。 ご存知の方がいらっしゃいましたらご教授下さい。 よろしくお願いします。

  • 起動しているアプリケーションのプロセスIDを取得したい.

    現在,起動しているアプリケーションのプロセスIDを取得したいと考えています. プロセスIDを取得するコマンドはあるのでしょうか? 環境:Windows2000+SP3

  • プロセス監視の方法

    どのたかよい方法をご存知の方いらっしゃいましたら、 助力お願いします。 .NETのアプリケーションで、ある特定のプロセスが起動した時に 処理を実行するアプリを作りたいと思っています。 この場合のあるプロセスとは、Notepadとか、Wordとかです。 無限ループで、プロセスを監視しようと思ったのですが、 メモリの消費が多く重たいので、何かよい方法はないでしょうか? 例えば、ある特定のプロセスが起動したら、 それがトリガーとなるような仕組みとか、可能でしょうか? よろしくお願いします。

  • ユーザのプロセスを終了する方法

    Windows Server 2008 R2で仮想デスクトップを使用しています。(XenApp 6.5を使用) サーバには80名程度のユーザがログオンして、それぞれアプリケーションを起動しているため、 プロセスの数が非常に多くなります。(同じプロセス名でもユーザ数分起動しているため) 上記の環境であるアプリを終了する際に、サブ画面のプロセスが起動している場合は 一緒に終了するような作りにしたいと考えており、現在のところ以下のWMIのスクリプトを 使用してプロセスの一覧を取得し、for文で一覧から該当するプロセスIDを特定してkillする というような仕組みを検討しております。 Strcomputer = "." Set objWMIService = GetObject("winmgmts:\\" & Strcomputer & "\root\cimv2") Set colitems = objWMIService.ExecQuery("Select * from Win32_Process", , 48) ただ、上記のようにWin32_Processを使用すると、サーバ上で起動している全ユーザの プロセスが検索対象となってしまうため、処理に時間がかかることを懸念しております。 可能であれば、そのユーザだけのプロセスを検索対象としたいのですが、 そのような方法はありますでしょうか? WMI以外の方法でも構いませんので、アドバイスを頂けると助かります。

  • 起動したIEのウインドウタイトルを取得する方法

    こんばんは。WindowsXP+VB.NET環境です。 IE = CreateObject("InternetExplorer.Application") IE.Navigate("http://www.yahoo.co.jp") でインターネットエクスプローラを起動した場合に IEのウインドウの上の部分に表示されている 「Yahoo! JAPAN - Microsoft Internet Explorer」という文字と プロセスIDとプロセス名を取得したいのですが どのようなコードを書けば良いでしょうか? WEBサイトで調べていたら起動中の全プロセスのものを全て表示する 方法はあったのですが、起動したIE限定で取得したいです。 IE.IdとかIE.ProcessName、IE.MainWindowTitleのようにしてみたのですが エラーになってしまいました。 あと、別の方法で Dim hProcess As System.Diagnostics.Process = System.Diagnostics.Process.Start("iexplore") hProcess.WaitForInputIdle() Dim pName As String = hProcess.MainWindowTitle としたら出来るようになったのですが、 起動した後に上の方法でやった時のようにIE.Navigate("http://****")で 移動したりしたいのですが、この方法で起動した場合の 方法が分からなくなってしまいました。 IE = CreateObject("InternetExplorer.Application")で起動したIEのように 操作できるようにする方法を教えて頂きたいです。よろしくお願い致します。

  • Process.Startの戻り値を後で取得

    お世話になっております。 作業マシン:WINDOWS Server2008 (仮想) 開発ツール:VWD2010(VB) 使用DB:SQLServer2008R2 にて、Webアプリを開発しております。 ASP.NET開発の経験はおおよそ1ヶ月半程です。 現在、Process.Startで外部exeを実行しております。 この外部実行ファイルは3分くらい掛かる処理で、 WaitForExit() で結果を待たずに 次の画面(待機用画面)に遷移しています。 処理が終了したら、待機画面から結果画面へと遷移させたいのですが、 プロセスの完了と、その結果(戻り値)を、 Process.Startをコールした画面以外で受け取る事が出来るのでしょうか。 WaitForExitを使用するならば、 素直に終了を待ち、終了後にExitCodeを取得、 Ret = Process.Start() で戻り値も取得できましたが… WaitForExit( ) をしない場合、どのようにして取得できるのでしょうか。 http://dobon.net/vb/dotnet/process/openfile.html こちら等、Process.Start 非同期 などのキーワードで出てくるのは Processを実行した同画面内での待機のケースが多く、 今自分が遭遇しているケースに応用するには どうにも自分の理解が追いつけず質問いたします。 実行する画面でプロセスIDを取得し、セッションに持たせ、 終了を判断したい画面でプロセスIDを元にチェックをする… と言うことも考えてみましたが、プロセスIDを頼りに、 終了したプロセスの戻り値を突き止める方法も見つからず (発想自体が間違っているかもしれません) 皆様のお力を貸して頂けないでしょうか。何卒よろしくお願いします。

専門家に質問してみよう