2

ハングした場合に出力リダイレクトでコマンドを強制終了する軽量のソリューションを探しています。私の現在の解決策

if [[ -w /tmp/mypipe ]]; then
  timeout --kill-after 10 5 echo "1" > /tmp/mypipe
fi

コマンドの左側の部分が正しく機能しない場合にのみ機能します (たとえば、誰もパイプから読み取らないなど)。しかし、リダイレクトがハングする状況を発見しました。これは、少なくとも完全に同期されていないタスクの問題であり、今は解決できません。

thisthis 、またはthatのようないくつかの関連する質問があります。最後の質問はほとんど私の質問をカバーしていますが、私はまだもっとスリムな解決策を探しています。次のように動作することを示唆しています

( CMDPID=$BASHPID; \
  (sleep 5; kill -9 $CMDPID >& /dev/null) & echo "1" > /tmp/mypipe )

しかし、これにより 2 つの新しい bash プロセスが生成されます。その問題に対するより軽量な解決策はありますか?

4

1 に答える 1

1

生成された各 bash プロセスは、そのメモリの大部分を親プロセスと共有するため、top のようにメモリ使用量が 3 倍になるわけではないことに注意してください。

それでも最適化を試みたい場合は、timeout 5 tee /tmp/mypipe <<< "1" > /dev/null代わりにタイムアウトとティー プロセスを生成します。

于 2013-05-30T20:01:40.453 に答える