Help us understand the problem. What is going on with this article?

【小ネタ】一定時間応答が返らないコマンドを強制終了するコマンド(timeout)

はじめに

今日はちょっとした小ネタ。

別件で調べものをしていた際にスクリプトなどで「一定時間コマンドが返って来なかった場合」的なロジックを組み込む時に使えそうなコマンドを見つけたので、備忘がてら紹介します。
自分はwhileで回しながらsleepをかけたり、みたいなことをしていたのですが、今時のLinuxはそんなことしなくても良さそうですよ、という話です。

timeoutコマンドとは

timeoutコマンドは、指定したコマンドの実行時間を指定し、その間に終われば正常終了、終わらなければ異常終了(打ち切り)とするものです。

  • 書式 : timeout (num) (command)

詳細なオプションなどは下記の記事(@IT)を参照。

https://www.atmarkit.co.jp/ait/articles/1906/27/news008.html

※タイムアウトの単位を秒(デフォルト)以外に分や時間で指定したり、終了時のシグナルを指定したり等、割とかゆいところに手が届く仕様になっているようです。

試してみました

### 正常時 ###
$ time timeout 3 sleep 2 ; echo $?

real    0m2.002s
user    0m0.002s
sys     0m0.000s
0

  →時間内に終わった場合はRC=0が返ります

### 異常時 ###
$ time timeout 3 sleep 6 ; echo $?

real    0m3.001s
user    0m0.002s
sys     0m0.000s
124

  →指定した時間に到達した時点でコマンドは強制終了(RC=124)となります
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした