Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在管道传输时捕获进程终止_Node.js_Unix_Process_Pipe - Fatal编程技术网

Node.js 在管道传输时捕获进程终止

Node.js 在管道传输时捕获进程终止,node.js,unix,process,pipe,Node.js,Unix,Process,Pipe,我有一个node CLI程序,它可以永远运行,并且应该在进程终止之前打印摘要。我已将这些事件登记在终止前: process.on("exit", end); process.on("SIGINT", end); process.on("SIGQUIT", end); process.on("SIGTERM", end); 上述回调在使用节点应用程序启动时运行,但在流程像节点应用程序| tee file那样通过管道传输时不会运行,在这种情况下,我既不会收到SIGINT,也不会运行退出回调。有什么

我有一个node CLI程序,它可以永远运行,并且应该在进程终止之前打印摘要。我已将这些事件登记在终止前:

process.on("exit", end);
process.on("SIGINT", end);
process.on("SIGQUIT", end);
process.on("SIGTERM", end);

上述回调在使用
节点应用程序启动时运行,但在流程像
节点应用程序| tee file
那样通过管道传输时不会运行,在这种情况下,我既不会收到SIGINT,也不会运行
退出
回调。有什么建议吗?

通过检查
process.stdout.\u type==“pipe”
,解决了这个问题,在这种情况下,我将输出到
stderr
,而不是
stdout
。这不是一个很好的解决方案,但它满足了我的需要。

它适合我(
exit
event)。我在Linux上的节点v0.10.31上进行了测试。你在尝试什么节点版本?我在节点v0.10.35上,程序被SIGINT中断,如果这很重要的话。对我来说,在Linux和OS X上都会发生。如果你想查看它:
npm安装-g tcpie&&tcpie google.com | tee/dev/null
,然后对它进行SIGINT。有趣的是,当使用
kill-s SIGINT pid
停止它时,它的行为是正确的,它只是CTRL-C,在管道传输时似乎不会触发任何一个事件。我现在确定回调会被调用,但由于stdout仍然是管道式的,我打印的输出永远不会到达终端。相反,打印到stderr是可行的,但这是一个丑陋的黑客行为。