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

公開日: : 最終更新日: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

関連記事

no image

ディレクトリに関するユーティリティ

ディレクトリに関するスニペットをいくつか書いた。いつかコピペする日が来ると思うのでメモしておく。

記事を読む

no image

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

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

記事を読む

no image

Jetty でシンプルなプロジェクトを作成してみた

プロトタイプを作成するなら Tomcat よりも Jetty のほうがさらっと出来そうだなぁ、と今さ

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

GradleLogoReg

SDKMAN!(GVM) を使って Mac に Gradle をインストールする

長らく Java のアプリ開発には Maven を使ってきたが、時代に取り残されている感じがするので

記事を読む

no image

Stream#filter()で絞り込みmap()で処理するコードスニペット

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

記事を読む

icatch-thumbnail

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

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

記事を読む

icatch-3361b5e1-resized

Optional型の変数にget()とifPresent()は使わない

Java8 から導入された Optional を勉強するため、過去にプライベートで書いたコードに O

記事を読む

icatch-10139609144_5bc33706f9_z-resized

保存ダイアログを表示させてファイルをダウンロードさせる方法

例えば、ブラウザに表示している画像は右クリックを使ってダウンロードできますが、左クリックから保存ダイ

記事を読む

Googleアドセンス用(PC)

Message

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


二 × 8 =

次の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 ↑