`dmesg | head`で(どのように)10行の出力後にdmesgが終了しますか? [コピー]

`dmesg | head`で(どのように)10行の出力後にdmesgが終了しますか? [コピー]

次のコマンドを実行すると:

dmesg | head -n 10

私はOSがdmesg10行を読んだ後に何らかの信号を送り返すと仮定します。headどのように動作しますか?headカーネルに何を教えてください。

これは通常の「クリーン」停止なので、プログラムのシャットダウンとは異なります。

ベストアンサー1

これは、オペレーティングシステムのバッファと10番目と11番目の書き込みのタイミングによって異なりますdmesg

head10行を書き込んで終了してdmesg受信します。SIGPIPE信号パイプに書き続ける場合。

オペレーティングシステムのバッファによっては、通常dmesg10行以上が使用される前に書き込まれます。head

head10行以上が使用されていることを確認するには、次のようにします。

strace -f sh -c 'dmesg | head -n 10'

head(プロセスを見てreadシステムコールの回数を計算します。)

書き込み速度に与える影響を確認してください。

strace -f sh -c "perl -le '$|++;print 1 while 1' | head -n 10"

おすすめ記事