デフォルトの動作

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プロセス自体が不完全な状態で終了すると、書き込み中のログの一部が欠ける。