在NodeJS中关闭可读流到FIFO



我在nodejs中创建一个可读流到linux fifo,像这样:

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

这一切都工作得很好,我可以从fifo接收数据。我的问题是,我想有一个方法来轻轻地关闭我的软件,因此我需要以某种方式关闭这个流。

调用

process.exit();

不起作用,因为流阻塞了。

我还尝试通过调用未记录的方法stream.close()stream.destroy()来手动销毁流,如本问题的答案中所述。

我知道我可以使用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后。

我如何修改上面的代码来正确关闭软件?

显式地写入命名管道将解除读操作的阻塞,例如:

require('child_process').execSync('echo "" > fifo');
process.exit();

相关内容

  • 没有找到相关文章

最新更新