我有一个Node脚本,用于启动.as-console-wrapper { max-height: 100% !important; top: 0; }
和mongod
进程。我在脚本中设置了一个侦听node
的进程监听器,以防我使用SIGINT
取消。然后,监听器使用child_process#kill()
来杀死其他两个进程
这一切都有效,但它几乎总是最终从Ctrl-C
进程生成core
文件。我想避免创建此文件。我该怎么做? (是的,我确实知道我可以发出一个文件系统调用来删除它。)
输出
mongod
答案 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
。