プロセスの起動を確認するプログラム

公開日: : 最終更新日:2014/01/26 Java ,

プロセスが起動しているかを確認するプログラムを Java で書いてみました。Excel のプロセス確認用に作ったのですが、他の用途でも使えると思うのでメモしておきます。

背景

Java の Swing を使ったデスクトップアプリを作っていて、そのアプリから Excel を起動する機能があります。ただし、Excel がいくつも起動するとうっとおしいので2重起動させないという要件がありまして、その対策として確認プログラムを作りました。

動作環境

Java のバージョンは次の通りです。

$ java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

Excel のバージョンはあまり関係ないかと思いますが、2007 を使っています。。。

ソースコード

Gist にも登録してあります。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
import org.apache.log4j.Logger;
 
/**
 * プロセスの起動を監視するクラス。
 * 
 * @author tomoyamkung
 *
 */
public class ProcessWatch {
    
    private static Logger log = Logger.getLogger(ProcessWatch.class);
    
    private static final String TASKLIST = "tasklist";
    
    /** Excel のプロセス名 */
    public static final String EXCEL_EXE = "EXCEL.EXE";
 
    /**
     * プロセスが起動しているかを問い合わせる。
     * 
     * @param processName プロセス名
     * @return
     */
    public static boolean isRun(String processName) {
        try {
            Process p = new ProcessBuilder(ProcessWatch.TASKLIST).start();
            BufferedReader br =
                new BufferedReader(new InputStreamReader(p.getInputStream()));
            try {
                while (true) {
                    String line = br.readLine();
                    if (line == null) {
                        break;
                    }
                    if(line.startsWith(processName)) {
                        return true;
                    }
                }
            } finally {
                br.close();
            }
        } catch (IOException e) {
            log.error(e.getMessage(), e);
            e.printStackTrace();
        }
 
        return false;
    }
    
}

ProcessWatch#isRun の引数に確認したいプロセス名を指定します。今回は Excel を確認したかったので、ProcessWatch.EXCEL_EXE のみを定義しています。

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

icatch-thumbnail

レスポンスにサムネイル画像を返す API のサンプル

今回は直接 ImageMagick は関係ありませんが、また画像ネタです。この辺りのことを仕事で扱っ

記事を読む

no image

google-gson でシリアライズ・デシリアライズしたサンプル

これまで Java で JSON を扱うときは JSONIC を使っていたが、google-gson

記事を読む

no image

サーブレットでクラスパス上にあるプロパティファイルを参照するスニペット

よく使うわりにはいつも調べているのでいい加減メモすることにした。 "app.proper

記事を読む

icatch_2185253176-resized

Java8 の Optional 型を返す Generics を使ったメソッドを定義する

Java8 の Optional とガード節 に続いて Java8 の Optional ネタ。今回

記事を読む

icatch_4610898091-resized

Java8 の Optional とガード節

メソッドの冒頭で条件チェックを行い、条件を満たしていない場合はさっさと return してしまう「ガ

記事を読む

no image

ファイルの拡張子が JPG であるかを問い合わせるスニペット

特に目新しいこともないが、同じようなことをする機会があるかもしれないのでメモ。Gist にも登録済み

記事を読む

no image

Java から VBScript を使って Excel を印刷する

背景 Java のデスクトップアプリを作成していたときの要件に「Excel で作成された帳票を印刷

記事を読む

icatch-upload_1229138273_mini-thumbnail

InputStream に格納されているストリームデータのサイズを取得する

Jersey を使った Web アプリを作成中なんですが、 enctype="multipart/f

記事を読む

no image

Google Guava の Function を使った文字列加工の FluentIterable サンプル

お客様の都合上 Java7 で開発している案件があるのだが、Java8 の Function とか

記事を読む

no image

Stream#map()とStream#collect()を使ってListを生成する

Java8 から導入された Stream API も少しずつ慣れてきて、「そういえばこういうパターン

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


− 九 = 0

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑