关闭NodeJS中FIFO的可读流

时间:2015-07-08 07:41:44

标签: node.js stream fifo

我正在这样的nodejs中为linux fifo创建一个可读的流:

var stream = FS.createReadStream('fifo');

这一切都很好,我可以从fifo收到数据就好了。 我的问题是我希望有一种方法轻轻关闭我的软件,因此我需要以某种方式关闭此流。

调用

process.exit();
由于流阻塞,

无效。

我还尝试通过调用未记录的方法stream.close()以及stream.destroy()来手动销毁流,如in the answers of this question所述。

我知道我可以使用process.kill(process.pid, 'SIGKILL')杀死我自己的进程,但这感觉非常糟糕,可能对文件系统或数据库产生不良影响。

难道没有更好的方法来实现这一目标吗?

您可以尝试使用最小示例来重现我的问题:

var FS = require('fs');
console.log("Creating readable stream on fifo ...");
var stream = FS.createReadStream('fifo');
stream.once('close', function() {
    console.log("The close event was emitted.");
});
stream.close();
stream.destroy();
process.exit();

使用mkfifo fifo创建一个名为'fifo'的fifo。

如何修改上述代码以正确关闭软件?

1 个答案:

答案 0 :(得分:0)

显式写入命名管道将取消阻止读取操作,例如:

require('child_process').execSync('echo "" > fifo');
process.exit();
相关问题