仕事で、わざわざその為にスクリプトを組むのも面倒な、プロセス停止に時間がかかるようであればプロセスをkillしてしまうという対応があった。
面倒なのでワンライナーで対処できないかなぁ。。。と思い調べたところ、Linuxのディストリではtimeoutコマンドというものが用意されているようだ。
使い方は簡単で、以下のようにtimeoutコマンドを実行するだけだ。
timeout 待機時間(秒) 実行コマンド
で、実行コマンドが待機秒内で終了しない場合、exitコード124で異常終了する。
[root@BS-PUB-CENT7-01 ~]# # 5秒でタイムアウト(2秒sleep)
[root@BS-PUB-CENT7-01 ~]# time timeout 5 sleep 2;echo $?
real 0m2.005s
user 0m0.001s
sys 0m0.003s
0
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# # 5秒でタイムアウト(10秒sleep)
[root@BS-PUB-CENT7-01 ~]# time timeout 5 sleep 10;echo $?
real 0m5.004s
user 0m0.001s
sys 0m0.003s
124
ということは、以下のように記述することでタイムアウト時の分岐処理を一行で記述できる。
timeout 待機時間(秒) 実行コマンド || timeout時の実行コマンド
[root@BS-PUB-CENT7-01 ~]# # 5秒でタイムアウト(2秒sleep)
[root@BS-PUB-CENT7-01 ~]# time timeout 5 sleep 2 || echo "Timeout Error"
real 0m2.005s
user 0m0.002s
sys 0m0.003s
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# # 5秒でタイムアウト(10秒sleep)
[root@BS-PUB-CENT7-01 ~]# time timeout 5 sleep 10 || echo "Timeout Error"
real 0m5.003s
user 0m0.000s
sys 0m0.004s
Timeout Error
これで、ひとまずは対処出来たかな。