node.js - 杀死child_process时避免生成核心文件

标签 node.js

我有一个 Node 脚本,它启动一个 mongod 和一个 node 进程。我在脚本中设置了一个进程监听器来监听 SIGINT,以防我应该使用 Ctrl-C 取消。然后监听器使用 child_process#kill()杀死另外两个进程

这一切都有效,但它几乎总是最终从 mongod 进程生成一个 core 文件。我想避免创建这个文件。我该怎么做? (是的,我确实意识到我可以发出文件系统调用来删除它)。

输出

^C[mongod]  2017-07-23T09:23:07.181+0200 I CONTROL  [signalProcessingThread] got signal 2 (Interrupt), will terminate after current cmd ends
2017-07-23T09:23:07.181+0200 I NETWORK  [signalProcessingThread] shutdown: going to close listening sockets...
2017-07-23T09:23:07.181+0200 I NETWORK  [signalProcessingThread] closing listening socket: 6
2017-07-23T09:23:07.181+0200 I NETWORK  [signalProcessingThread] closing listening socket: 7
2017-07-23T09:23:07.181+0200 I NETWORK  [signalProcessingThread] removing socket file: /tmp/mongodb-23451.sock
2017-07-23T09:23:07.181+0200 I NETWORK  [signalProcessingThread] shutdown: going to flush diaglog...
2017-07-23T09:23:07.181+0200 I FTDC     [signalProcessingThread] Shutting down full-time diagnostic data capture
Caught SIGINT. Exiting gracefully ...

最佳答案

当使用 kill 系统调用时,您应该避免发送其默认操作是通过核心转储终止的信号(请参阅 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html )。

如果您不发送此类信号,则可以消除核心转储 将核心转储的进程限制设置为 0。

这是通过 rlimit 系统调用完成的,但由于 NodeJs 可能没有相应的 API,因此您可以通过 shell 生成子进程来实现相同的结果,您可以在 shell 中设置使用 ulimit -c 0 进行限制(该限制由子进程继承)。

示例:

const child_process = require('child_process')
const child = child_process.spawn("ulimit -c 0; sh -c 'kill -ABRT $$'; ls core", [], {shell: true });
child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stdout);

如果您运行上述命令:

rm -f 核心; Nodejs the_script.js

它应该输出:

Aborted
ls: cannot access core: No such file or directory

如果您不希望在 Nodejs 创建的进程层次结构中的任何位置进行核心转储,则可以在启动 nodejs 之前设置 ulimit -c 0

关于node.js - 杀死child_process时避免生成核心文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262640/

相关文章:

javascript - 当用户想要重新加载页面时自定义 url

javascript - Google Universal Analytics - 设置自定义属性

node.js - winston - TypeError : winston. createLogger 不是构造函数

node.js - 为什么 Ubuntu 上的 Node.js 没有函数 fs.exists

Node.js 指定 tls 连接超时

javascript - Node js async.series 不适用于 Express 应用程序 --- 响应发生得太快

node.js - 在 Jade 中使用 HTML 是否被认为是不好的做法?

node.js - 如何使用适合移动设备的后置摄像头

node.js - 如何使用 mongoose 定义单个引用模式

javascript - Gulp 在 Windows 上运行失败 |错误消息 : Microsoft JScript compilation error, 无效字符