Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

timeoutコマンドで一定時間たったらシグナルを送る処理を実装する

いままでシェルスクリプトのsleepとループでぶん回していましたが……coreutilの中に便利なコマンドがありました……

実際のところ

$ [[ $( timeout --signal=SIGHUP --kill-after=2s 2s  /home/shuzo/testExit.bash > /home/shuzo/log.log  ) ]] && echo none
$ cat log.log

tstHUP
$ cat testExit.bash
#! /bin/bash
function catchHup () {
  printf HUP
}

trap "printf '\n\r`basename $0` is closing.'" EXIT
trap catchHup HUP

printf "tst"
read
exit 0

ダメ押しのkill-after

その辺りを解決するにはkill-afterコマンドを。
一発目は二秒後にSIGHUPを送り、その2秒後にデフォのシグナル……SIGKILLを送ってるようですね。
これはループで書くのが少し面倒なとこなので見通しが良くなりますね。

~$ [[ $( timeout --signal=SIGHUP --kill-after=2s 2s  /home/shuzo/testExit.bash > /home/shuzo/log.l
og  ) ]] && echo none