【发布时间】:2015-01-19 21:27:15
【问题描述】:
我有一个永远运行的节点 CLI 程序,它应该在进程终止之前打印一个摘要。我已注册这些事件以在终止前采取行动:
process.on("exit", end);
process.on("SIGINT", end);
process.on("SIGQUIT", end);
process.on("SIGTERM", end);
以上回调在以node app 启动时运行,但当进程像node app | tee file 那样通过管道传输时不会运行,在这种情况下,我不会收到 SIGINT,exit 回调也不会运行。有什么建议吗?
【问题讨论】:
-
它对我有用(
exit事件)。我在 Linux 上的节点 v0.10.31 上进行了测试。您正在尝试使用哪个节点版本? -
我在节点 v0.10.35 上,程序被 SIGINT 中断,如果这很重要的话。
-
对我来说发生在 Linux 和 OS X 上。如果你想检查一下:
npm install -g tcpie && tcpie google.com | tee /dev/null然后 SIGINT 。 -
有趣的是,当使用
kill -s SIGINT pid停止它时它的行为是正确的,它只是 CTRL-C,它似乎不会在管道时触发任何一个事件。 -
我现在确定回调会被调用,但由于 stdout 仍在管道中,我打印的输出永远不会到达终端。打印到 stderr 确实有效,但这是一个丑陋的 hack。