Когда я запускаю это в Баш:Почему открытие трубы fifo в блоке узла child_process.exec?
mkfifo im-a-pipe && node -e '
var fs = require("fs")
var childProcess = require("child_process")
console.log("pre-open")
fs.open("im-a-pipe", "w", function(err, fd){
if(err)
throw err
console.log("opened")
})
console.log("post-open")
childProcess.exec("echo wat")
console.log("YOU CAN NOT SEE MEEE")
'
Я ожидаю, что следующий вывод:
pre-open
post-open
YOU CAN NOT SEE MEEE
Но вместо узла ожидания после печати первые две строки:
pre-open
post-open
Я думая, что это, вероятно, имеет какое-то отношение к блокировке трубы, пока что-то не откроет другую сторону, но это меня удивило.
Я пропустил что-то с тем, как эти функции должны работать?
Да, я понимаю, что трубы блокируют запись, пока другой процесс не откроет трубу для чтения, но здесь есть две вещи: 1) Node.js обычно использует неблокирующий интерфейс, а childProcess.exec не должен блокировать 2) Процесс даже не блокирует открытый вызов в трубе. –