「シグナル」を送ってみよう“応用力”をつけるためのLinux再入門(17)(2/2 ページ)

» 2017年08月10日 05時00分 公開
[西村めぐみ@IT]
前のページへ 1|2       

シグナルの送信を試してみよう(2)

 今度は“1つのジョブで複数のコマンドを実行している場合”で試してみましょう。動作を分かりやすくするために「ping localhost | tail -n 3」で試しています。「tail」は入力された内容の末尾を表示するコマンドです。ここでは「-n 3」で、末尾3行を表示させています。pingは基本的に出力が終了しませんので、何らかの方法でpingを終わらせない限り、tailも終了しません。

 まずは、キー操作で試してみましょう。先ほど同じように2つの端末を使い、片方の端末で「ping localhost | tail -n 3」、もう片方で「ps -a -O stat」を実行しています。

 pingとtailの画面では[CTRL]+[Z]で終了、「fg」で再開、[CTRL]+[C]で終了しています(画面4)。

画面4 画面4 pingとtailを実行している画面

 それぞれのタイミングでpsコマンドを実行すると、以下の画面5のようになります。

画面5 画面5 画面4を実行しているときの様子

 次に、同じコマンドラインでpingとtailに対し、シグナルを送ってみます(画面6)。

画面6 画面6 別端末(次の画面7)で実行中のpingとtailに対してシグナルを送る
画面7 画面7 画面6を実行中の様子。(1)はpingとtailの両方にSIGSTOPを送信した時点で表示される。(2)はpingにSIGINTとSINGCONTを送った後、tailにSIGCONTを送信した時点で表示される

パイプとシグナルの関係

 ファイルの冒頭部分だけを表示したい、実行結果の最初だけを表示したいといった場合には「head」コマンドが便利です。例えば、「ls | head」ならば、lsコマンドの実行結果の先頭10行だけが表示されます。このとき、headコマンドが10行を出力し終わると、lsコマンド側にSIGPIPEが送られて、それに伴いlsコマンドは終了します。つまり、lsコマンドは“headコマンドが先頭10行を出力した時点で終了”しています。

 lsコマンドやcatコマンドなどは特に問題ありませんが、「configure」や「make」のような“最後まで実行されている必要があるコマンド”の場合は別の手段を使う必要があります。

 例えば、開始時の出力をちょっと確認したいだけであれば、実行直後に[CTRL]+[Z]で停止するか、[CTRL]+[S]で出力を止めて確認したらすぐ再開させればほとんど場合で用は足ります。きちんと確認したいのであれば、リダイレクトでログを保存しておき、後で確認するとよいでしょう。画面にも出力したいのであれば「tee」コマンドが便利です。

 逆に、オプションの指定が正しいかどうかを確認したいような場合は、headが便利です。例えば、「find 〜 | head -3」のように実行しておくと、findコマンドで3つのファイルを見つけたところでコマンドが終了します。

 “パイプの後ろにあるコマンドが終了すると、前のコマンドも終了”という動作を、pingコマンドで試してみましょう。例えば、「ping localhost | head -n 3」のようにすると、headコマンドが3行出力した時点でpingもheadも終了します(画面8)。

画面8 画面8 pingとheadを組み合わせて実行した場合

 パイプの後ろにあるコマンドが終了したときのシグナルは「SIGPIPE」(読み手のいないパイプへの書き込みが発生)です。例えば、先ほどの「ping localhost | tail -n 3」でも、SIGPIPEが送られると直ちに終了することが分かります(画面9画面10)。

画面9 画面9 SIGPIPEを試す(1)。pingにSIGPIPEを送信(SIGPIPEは、本来は“パイプの先”にあるtailコマンドが終了したときに受け取るシグナル)。SIGPIPEを受け取ったpingが終了したので、tailも3行出力して終了している
画面10 画面10 SIGPIPEを試す(2)。SIGPIPEを受け取ったtailが終了したので、“パイプの先”が終了したpingも終了している

筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。