tail --pidオプションの使い方を完全ガイド!指定プロセス終了時に自動でtailを止める方法
生徒
「Linuxでtail -fでログ監視してるんですが、別の処理が終わったら自動で止まってほしいなと思って…」
先生
「そんなときは--pidオプションを使うと、特定のプロセスが終了したらtailも一緒に止まってくれますよ。」
生徒
「プロセスってなんですか?番号ってどうやって調べるんですか?」
先生
「いい質問ですね。まずはプロセスとPID(プロセスID)の基本から丁寧に説明しましょう!」
1. tailコマンドとは?
tailコマンドは、ファイルの最後の部分(末尾)を表示するためのLinuxコマンドです。特にログファイルの確認によく使われ、-fオプションを使えば、リアルタイムで追跡(監視)できます。
たとえばWebサーバーのログを見ているときに、新しいアクセスが記録されるたびに、その内容が自動で表示されるようになります。
2. プロセスとPIDって何?
プロセスとは、Linuxで動いている1つ1つの「実行中のプログラム」のことです。たとえば、Firefoxやエディター、バックグラウンドで動いているサービスなどもすべてプロセスです。
それぞれのプロセスには「PID(プロセスID)」という番号が割り振られています。人間でいうと名前や社員番号のようなもので、Linuxがそれぞれの動作を識別するために使っています。
現在動いているプロセスのPIDを調べるには、psコマンドやpgrepコマンドを使います。
ps aux | grep firefox
(firefoxの行に表示されている数字がPID)
3. --pidオプションの基本的な使い方
--pidオプションは、「指定したPIDのプロセスが終了したら、自動的にtailコマンドも終了する」という便利な機能です。
通常、tail -fでログファイルを見ていると、ずっと止まらないというのがデフォルトの動作です。しかし、--pidを使えば、たとえば「このスクリプトが終わったらtailも止める」といった使い方ができます。
4. 実例で学ぶ!tail --pidの使い方
たとえば、sleep 10というコマンド(10秒間だけ待機する)をバックグラウンドで動かして、そのPIDを使ってtailを制御してみましょう。
まずはsleepを実行して、そのPIDを確認します。
sleep 10 &
echo $!
12345
$!は、「直前にバックグラウンドで実行したコマンドのPID」を取得するための特殊な変数です。ここではPIDが12345と仮定します。
このPIDを使って、tail --pidを実行してみます。
tail -f --pid=12345 /var/log/syslog
(10秒後、sleepが終了するとtailも自動で終了します)
5. tail --pidのメリットとは?
tail --pidを使うことで、他の処理の完了と連動してtailを終了させたいというニーズに応えることができます。特にスクリプトやバッチ処理の中で、「ある処理の監視が終わったらtailも止めたい」といった場面で非常に役立ちます。
例えば、あるツールのインストール中にログを監視し、インストールが終わったら自動でtailを閉じたい場合などに使われます。
6. --pidオプションはどんなときに便利?
- バックアップスクリプトが終わったらログ監視を止めたいとき
- 他のプロセスのログをリアルタイムで見つつ、終わったら自動で抜けたいとき
- 複数の処理を並行して行うスクリプトで、自動終了制御したいとき
このようにtail --pidは、自動化や効率化に役立つ便利なオプションです。
7. よくあるエラーと注意点
--pidで指定したPIDがすでに終了している場合、tailはすぐに終了してしまいます。正しく動作させるためには、対象のプロセスがまだ実行中である必要があります。
また、tailは指定したログファイルにアクセス権限が必要です。ログによってはsudoが必要な場合もあるため注意しましょう。
sudo tail -f --pid=12345 /var/log/auth.log
(root権限で認証ログを監視し、プロセス終了でtailも停止)
8. --pidと組み合わせて便利なオプション
--pidは、他のオプションと一緒に使うとさらに便利になります。
-nオプション:表示する行数を指定-Fオプション:ファイルが切り替わっても追跡継続
たとえば次のように使えば、ログの最新10行を表示しつつ、ファイルが切り替わっても監視し、指定プロセスが終わったら終了します。
tail -n 10 -F --pid=12345 /var/log/syslog
(柔軟なログ監視が可能になります)
9. --pidが対応していない環境もある?
tail --pidは、GNU版のtailでのみ利用可能です。もしエラーになる場合は、--versionでバージョンを確認してみましょう。
tail --version
tail (GNU coreutils) 8.32
古いディストリビューションや、BusyBoxのような軽量Linuxでは未対応の場合もあります。