私がする時 tail -f filename
、使用せずにモードを終了する方法Ctrl+c
プロセスを強制終了しますか?
q
のtop
のように、通常の方法で終了します。
プロセスを殺すことは何かをやめるための良い方法ではないと私は感じているので、私は質問に興味があります。
コメントで述べたように、 Ctrl-C tail
プロセスを強制終了しません。これは、SIGTERMまたはSIGKILLシグナル(悪名高い-9
...)のいずれかを送信することによって行われます。転送モードを終了して終了するようにtail
に指示するSIGINTを送信するだけです。
参考までに、これらはより良いツールです:
less +F filename
less
では、 Ctrl-C 転送モードを終了してファイルをスクロールし、次に F 再び転送モードに戻ります。
less +F
はtail -f
のより良い代替案として多くの人から支持されていることに注意してください。 2つのツールの違いと注意事項については、次の回答をお読みください。 `tail + f`は` less + F`よりも効率的ですか?
私が欲しいのは、一番上のqのように、通常の方法で終了することです。
それは ControlC :)
プロセスを殺すことは何かをやめるための良い方法ではないと私は感じているので、私は質問に興味があります。
^C
(ControlC) [〜#〜] sigint [〜#〜] をプロセスに送信します。これは次のように定義されます:
SIGINTシグナルは、ユーザーがプロセスを中断したいときに、制御端末によってプロセスに送信されます。
それがまさにあなたがここでしたいことです、割り込みtail
です。あなたがやろうとしていることを成し遂げる方法は他にありません(「うまく」終了します)。他の答えは、他の方法でtail
を停止する手段を提供しますが、それよりも優れています。
^C
を押すと、Linuxでタスクを中断しようとします-これは完全に正常であり、そのプロセスが何かの途中にあり、それを終了させない場合、それは唯一「唯一の問題」です。 「良くない」副作用は、そのプロセスの残り物です。例として、make
コマンドの途中にある^C
は、部分的にコンパイルされたソフトウェアを残しますが、それで問題ありません。make
をさらに実行すると、クリーンアップ/残った場所から再開しますオフ。
tail -f
ファイル名、使用せずにモードを終了する方法 Ctrl c プロセスを終了する
それはできません。おそらくあなたはtail -f somefile | less
の Ctrl c ttyサブシステム(およびシェル)によって解釈され、SIGINT
シグナルを送信します( signal(7) および pty(7) ...を参照)。 )。 tty demystified を参照してください。
これはうまくいき、あなたの質問に答えますが、特に満足できる解決策ではありません。
timeout 15s tail -f /var/log/messages
これにより、コマンドが15秒間実行され、^C
を押さなくても強制終了されます。
発行中
echo tail -n 1 -f <filename>
私はそれがテールプロセスを終了することを100%確信していませんが私にとってはうまくいきます。
答えは状況によって異なります。エレガントにtail -fを終了するには、トリガーが必要です。ある時点で終了するタスクの出力を監視しようとしていると仮定します-これがトリガーになる可能性があります。
task >& filename.log &
task_pid=$!
tail -f filename.log &
tail_pid=$!
while [ 1 ]
do
# -0 is a special "poke" signal - "are you around?"
kill -0 $task_pid
if [ $? -eq 0 ]
then
# Original task is still alive.
sleep 2
continue
fi
kill -TERM $tail_pid
break
done
私は過去に同様のアイデアを使用しました。
楽しい。