/usr/bin/gssproxyからパイプ中にCatがブロックされます( `timeout -k 1 1 /usr/bin/gssproxy | cat`は終了しません)。

/usr/bin/gssproxyからパイプ中にCatがブロックされます( `timeout -k 1 1 /usr/bin/gssproxy | cat`は終了しません)。

gssproxy特にArch Linuxで使用しています。

Name            : gssproxy
Version         : 0.8.0-1

/usr/bin/gssproxy 次の動作が発生しました。このように出力をパイプしようとすると

/usr/bin/gssproxy | cat

ブロックされます。ただし、このコマンドを実行すると /usr/bin/gssproxyブロックされず、バックグラウンドで別のプロセスが生成されます。

root 13720 0.0 0.0 59732 584 ? Ssl 11:44 0:00 /usr/bin/gssproxy

そして存在します。

パイプされる出力が意味がないかもしれないことに同意しますgssproxyが、この動作が発生する理由を知りたいと思います。特にcat詰まりの原因は何ですか?

編集する:

ブロックとは、次のコマンドを意味します。

timeout -k 1 1 /usr/bin/gssproxy | cat

終了せずに同時に

timeout -k 1 1 /usr/bin/gssproxy

すぐに終了します。どちらのコマンドもgssproxyバックグラウンドでプロセスを生成します。なぜ最初のコマンドが期待どおりに1秒後に終了しないのか疑問に思います。

ベストアンサー1

@Kusalanandaが述べたように、gssproxyデーモンプロセスとして実行すると、親プロセスは子プロセスが終了するのを待つことができます。

以下は、同じ状況をシミュレートするショートシェルスクリプトです。

$ cat t1
#!/bin/bash
sleep 10 &

$ date; ./t1 | cat ; date
Sun Apr  7 10:59:02 BST 2019
Sun Apr  7 10:59:12 BST 2019

date コマンドは、純粋に cat が終了した後 (10 秒) サブプロセスが存在することを示すためのものです。

おすすめ記事