コマンドを起動して一定時間後にタイムアウト終了させるコマンドを作りました

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コマンドを起動して一定時間後にタイムアウト終了させるコマンドを作りました

コマンドを起動して一定時間内に終了しなかった場合に強制的にkillするコマンドラインプログラムを作りました。

Linuxではulimitを使えば似たような機能が実現できるし、それがなくてもバックグラウンド起動した後に一定時間sleepしてkill $!すればいいだけなんだけど、Windowsだとあまり単純ではなさそうだったので。

Haskellで書いた単純なプログラムなので、GHCでビルドしてあげればWindowsやLinuxで使うことができます。

詳細は続きで。

ダウンロード・ビルド・インストール

ソースコードはGistで公開しています。

gist: 756160 - runfor -- Runs a command for a given time, kills it after the time is out.- GitHub

runfor -- Runs a command for a given time, kills it after the time is out.

一応、ZIPで固めたものもlab.liosk.netで公開しています (runfor.zip)。

ソースコードの中には、Windows用のビルドスクリプトbuild.batとLinux用のビルドスクリプトbuild.shが含まれていますが、中身はほぼ同じです。Haskell Platformをインストールした環境で↓のコマンドを叩けば簡単にビルドすることができます。

ghc -W -O -threaded --make runfor

-threadedフラグを加えるところがみそ。コンパイルが完了したらPATHの通っているところにコピーしてください。

Windowsユーザー向けにはWindows 7 (32bit) でビルドしたバイナリを用意したので、ダウンロードしてPATHの通っているフォルダー (C:\Windowsなど) に適当に放り込んでください (runfor.win32.zip)。

使い方

$ runfor --help
Usage: runfor DURATION PROG [ARG]...
Execute a PROGram for DURATION seconds.

実行させる秒数とプログラムを指定してrunforを起動します。

runfor 3 notepad runfor.hs

↑の例ではメモ帳を起動してrunfor.hsを表示し、3秒後にメモ帳が閉じられます。コマンドと引数をダブルクオート (") で括ったりする必要はありません。

起動できるコマンドは実行ファイルに限られます。DIRなどのようなシェルコマンドは起動できません。

起動したプログラムが制限時間内に終了した場合はプログラムが返した終了コードをそのまま返します。起動したプログラムがタイムアウトしてkillされた場合は失敗コードが返されます。

用途

xlhtmlに特定の条件下で無限ループに陥るバグがあって、Namazuでインデックスを作成するときに困ったので作りました。

実行時間がわからないプログラムや終了しなくなる可能性があるプログラムをバッチに組み込むときに便利です。

命名

runforというコマンド名はRUN a command FOR a given timeの意味から。正直なところ、runforではいろいろな意味に取れるから、あまりナイスな名前ではないと思っている。

ライセンス

MITライセンスなのでご自由にどうぞ。

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/207-c1db23b8

トラックバック

コメント

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。