SSブログ

java.exe に SIGINT を送信するには? [NT]

ant の java タスクで起動したプログラムは CTRL-C を受け取れない の続き。

CTRL-C は SIGINT シグナルのことである。だから、java.exe に CTRL-C を送信できれば、必ずしもターミナルから送信する必要は無い。

結局、kill コマンドを使えばよい。windows の場合でも kill コマンドは存在する。

最終的に、

tlist | grep bin\\java.exe | tail -n 1 | groovy -n -e " println line.split(' ')[0]" | xargs kill

という one-liner で処理することにした。

tlist でプロセスの一覧を出力し、それから bin\\java.exe が含まれる行のみを取り出し、複数の java.exe が合った場合に備え、最後の 1 行だけを抽出し、その行を空白を区切り文字として分割して PID を得て、xargs で kill に渡すと。

grep や xargs の入手については以前に GNU utilities for Win32:experiment に記載した。

わざわざ groovy を使う必要は無く、ruby -e でも awk でも、なんでもできそうだけど、split が簡単に使えたのと、少し前に groovy をインストールしたので使ってみたかった、というどうでも良い理由による。

で、上記 one-liner を bat として置いておけば、簡単に runserver した java.exe を停止できる。

java.exe を runserver 以外で使わないという条件があるけど、その条件を回避するのは手間の費用対効果の観点から実装しない。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。