2つのスレッドを持つ単純なapplicationを書きました。最初のスレッドはstdoutに、2番目のスレッドはstdinから読み込み中です。stderr、stdout、stdinをパイプにリダイレクトするとプロセスが実行されない
私はプロセスのstdin、stdout、stdinを以下の3つの異なるパイプにリダイレクトしました。
cat < pipe_out &
cat < pipe_err &
cat > pipe_in
はなぜ、このアプリケーションがブロックされている:私は下記行うまで
mkfifo pipe_in && mkifo pipe_out && mkfifo pipe_err
./a.out < pipe_in 2> pipe_err 1> pipe_out &
問題は、私は、このアプリケーション(./a.out)実行がブロックされていることでしょうか?それは他の側からの体がpipeを開いていないからですか?
完全にブロックされていない状態でアプリケーションを実行したいという問題の回避策を教えてください。私は、ユーザー入力がブロックされ、他のスレッドが実行を継続するのを待っているスレッドのみを必要とします。
このアプリケーションは起動時に起動します。したがって、このアプリケーションは、ユーザーの入力をブロックすることなく実行する必要があります。ユーザーはいつでも "cat> pipe_in"を使用して入力を開始し、このアプリケーションに関するいくつかの詳細を取得できます。
"回避策" - er、なぜあなたのアプリケーションの残りはブロックされるのですか?スレッドは別のものです... – o11c
デーモンを作成している場合は、stdioをまったく使用するのではなく、情報を提供するためにソケットを開く必要があります。 – o11c
@ o11c:これはデアモンのようなものですが、このアプリケーションに関する情報を得るためのユーザ入力を得るためのインタフェースを備えています。特定のものをチェックするためのテストモードの種類。 – avltree