簡體   English   中英

將stderr,stdout和stdin重定向到管道會阻止進程運行

[英]Redirecting stderr, stdout and stdin to pipe is blocking the process from running

我已經編寫了一個具有兩個線程的簡單應用程序 第一個線程正在打印到stdout,第二個線程正在從stdin讀取。

我將進程的stdin,stdout和stdin重定向到3個不同的管道,如下所示。

mkfifo pipe_in && mkifo pipe_out && mkfifo pipe_err

./a.out < pipe_in 2> pipe_err 1> pipe_out &

問題是在執行以下操作之前,該應用程序(./a.out)被阻止運行:

cat < pipe_out &
cat < pipe_err &
cat > pipe_in

為什么此應用程序被阻止? 是因為沒有其他人打開管道嗎?

我想在不完全阻止應用程序的情況下運行應用程序的問題的解決方法是什么? 我只希望正在等待用戶輸入的線程被阻塞,而其他線程則繼續執行。

該應用程序在啟動時啟動。 因此,該應用程序應在運行時不會被用戶輸入阻塞。 用戶可以隨時使用“ cat> pipe_in”開始提供輸入,以獲取有關此應用程序的一些詳細信息。

在啟動應用程序之前,重定向由外殼完成。 因此,在管道打開完成之前, a.out不會啟動,也無法創建任何可做任何事情的線程,並且在打開讀取端之前,管道寫側(對於1和2)的打開也不會完成。 (0的讀取側的打開不會立即完成。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM