在NodeJS中关闭可读流到FIFO

3
我将使用Node.js创建一个可读流到Linux的FIFO,代码如下:

```javascript ```

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”的管道后,我该如何修改上述代码以正确关闭软件?

创建流的方式如下:stream = FS.createReadStream('fifo', {flags : 'r+'});,然后像这样关闭它: var c = FS.createWriteStream('fifo'); c.write('\0'); c.close(); stream.pause(); stream.close(); 虽然可以工作,但感觉更像是一种肮脏的黑客行为。 - Prior99
1
在Node文档中有解释:https://nodejs.org/dist/latest-v11.x/docs/api/fs.html#fs_fs_createreadstream_path_options - Lloyd
1个回答

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接