$! の活用法


0. Contents

1.Concept
2.Test Script
3.Run Test
4.Summary


1. Concept

$! は最後にバックグラウンドで実行されたプロセス ID が
格納されている変数である。
これを使うとシェルスクリプト中にバックグラウンドで実行させた
コマンドにシグナルを送る事ができる。


2. Test Script

バックグランドで実行するコマンドにシグナルを送るスクリプトを作成した。
ソースは以下の通り。

#! /usr/bin/env bash

test1(){
  echo "$FUNCNAME:PID:$$"
  test2 &
  echo "test2:PID:$!"
  sleep 2
  kill $!
  echo "$FUNCNAME: done."
}

test2(){
  for (( i=1; i <= 5; i++ )) ; do
    echo "$FUNCNAME:$i"
    sleep 1
  done
  echo "$FUNCNAME: done."
}

test1
exit


3. Run Test

上記のスクリプトの実行結果。

test1:PID:8704
test2:PID:8705
test2:1
test2:2
test1: done.


4. Summary

結果は見ての通りだが, シェルスクリプト中にバックグラウンドで
コマンドを実行させると有効なケースが自分には思いつかない。
$! を有効利用しているスクリプトをぜひ見てみたいものである。