
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も可能です。
どなたか分かる方、ご教授頂けましたら幸いです。
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);
}
}
}
回答ありがとう御座います。
せっかくサンプルソースを頂いたのですが、リーダに「変な事するな」といわれてしまいました・・・。
また別の機会に試してみたいと思います。
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するなりなんなりすれば、プロセス名が取得できると思います。
酔った頭でテキトーに書いたサンプルコードですので、
まともに動かなくてもご了承の程お願い致します。
No.1
- 回答日時:
外部プログラムを経由して取得する方法しか知らないわ。
C#とかで取得したものをJavaに渡すといいわ。
VBScriptでもできたかも?
ところで気になったのだけど
実行時にopenofficeが起動していなくても
実行中にopenofficeが起動したらどうなっちゃうのかしら。
回答ありがとう御座います。
外部プログラムですか・・・。
>実行時にopenofficeが起動していなくても
>実行中にopenofficeが起動したらどうなっちゃうのかしら。
これって、どういう事ですかね?
待機させてる間に起動しきれず、次の処理実行中にopenofficeが起動したらってことですかね・・・
上記仮説だとして回答します。
待機させた後に、openofficeのコネクタを接続し、コンバータを取得します。
起動しきれない=コネクタ接続できない為、エラーで処理が異常終了するようにしてます。
起動しきれない=待機時間が短いって事だと思うので、設定ファイルの待機時間を増やして再実行(ユーザが)という形を取りました。
こういう感じにって指示を頂いたので。(リーダから)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイルの書き方について
-
jarファイルをバッチで実行させ...
-
cmd /c を使ったときと使わなか...
-
ShellExecuteでDOSコマンド実行...
-
「SimpleEntry を型に解決でき...
-
Eclipseで、プロジェクト名のと...
-
JSPのクラスをコンパイルできな...
-
「ワークスペースをビルド中」...
-
html上で、バッチやexeファイル...
-
【Eclipse】パッケージ・エクス...
-
JDKでJavaアプリケーション実行...
-
SVFの設定について:クラスパス...
-
Mac版eclipse(Java)のsysout.に...
-
classファイルについて
-
Eclipse・プロジェクトで、フォ...
-
OptiFineをJAVAで開こうとする...
-
jdbcドライバのjarファイルにク...
-
java クラスファイルとソースコ...
-
split関数で区切り文字がない場合
-
正しいURL指定しているにもかか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBプログラムから「管理者とし...
-
MacOS:ターミナルではNPMのコ...
-
ACCESSでタイトルバーを非表示...
-
batよりjava起動
-
32bitアプリから64bitアプリの...
-
Tomcatのメモリー使用量が知りたい
-
jarファイルをバッチで実行させ...
-
ShellExecuteの使い方について
-
SYSTEM関数等を用いて複数のコ...
-
CloudSticky.jarが起動しない。
-
バッチファイルの書き方について
-
Java VM のヒープサイズについて
-
ShellExecuteEx関数の使い方に...
-
コマンドプロンプトが使えない
-
コマンドを実行してコマンドラ...
-
eclipseからのターミナル実行方...
-
Java 特定プロセス名前取得方法...
-
Javaプログラムでコマンド実行...
-
C# コマンドプロンプト画面で表...
-
staticのメモリ共有について
おすすめ情報