用 pipe 把一個 process 的輸出、輸入轉給任意的 process 所可能會發生的 問題就是 deadlock,譬如這兩個 processes 剛好同時都在等待「尚未產生」 的輸入時。唯一能避免 deadlock 的方法就是在 pipe 的兩端都要遵循嚴格的 deadlock-free 協定,但是需要這些 processes 之間的互相合作才能達成, 而對於像 popen() 這類的函數來說並不太適合。
在 'expect' 這個軟體中附有一個能夠讓 C 程式直接引用的函式庫。其中有 一個函式不管是在讀或寫都能達到和 popen 相同的功能。但是這個函式是使 用 ptys 而不是 pipes,也沒有 deadlock 的問題,並且在 BSD 或 SV 中都 能使用。若想對 'expect' 有進一步的瞭解,可參考下一個問題的解答。