デフォルトの動作
teeコマンドは、SIGINT(Ctrl+Cで送られるシグナル)を受け取るとデフォルトの動作(プロセスの終了)を行う。
$ yes | tee out.txt > /dev/null &
[1] 12345
$ kill -INT 12345
$ jobs
[1]+ Interrupt yes | tee out.txt > /dev/null
kill -INTで直接SIGINTを送るとteeプロセスが終了する。
-iでSIGINTを無視する
-iを付けると、teeプロセスはSIGINTを受け取っても終了しない。
コマンド | tee -i ファイルパス
$ yes | tee -i out.txt > /dev/null &
[1] 12346
$ kill -INT 12346
$ jobs
[1]+ Running yes | tee -i out.txt > /dev/null &
$ kill 12346
-iありの場合はSIGINTを送ってもteeプロセスが実行し続けている。標準入力側(この例ではyes)がSIGINTで終了すれば、teeも標準入力のEOFを受けて正常終了する。
用途
パイプラインの途中でSIGINTが送られても、ファイルへの書き込みを最後まで確実に終わらせたい場合、-iが使える。ログを記録している最中にteeプロセス自体が不完全な状態で終了すると、書き込み中のログの一部が欠ける。
\第一線のプログラマーの行動原理を学べる!/
