杀死child_process时避免生成核心文件

时间:2017-07-23 07:33:22

标签: node.js

我有一个Node脚本,用于启动.as-console-wrapper { max-height: 100% !important; top: 0; }mongod进程。我在脚本中设置了一个侦听node的进程监听器,以防我使用SIGINT取消。然后,监听器使用child_process#kill()来杀死其他两个进程

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

输出

mongod

1 个答案:

答案 0 :(得分:2)

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

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

这是通过rlimit系统调用来完成的,但由于NodeJ可能没有它的API,你可以通过shell生成子进程来实现相同的结果,你可以用{设置限制{ {1}}(限制由子进程继承)。

示例:

ulimit -c 0

如果您使用以下命令运行上述内容:

rm -f core; nodejs the_script.js

它应输出:

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);

如果您不希望在nodejs创建的流程层次结构中的任何位置进行核心转储,则可以在开始Aborted ls: cannot access core: No such file or directory 之前设置ulimit -c 0