当我按ctrl + c生成其他进程的节点程序时,它似乎会完美地自动清理干净。如果我在后台甚至在前台运行它,并向其发送不同的终止信号,则不会。为什么会这样?
这里是一个例子。 (使用ubuntu)
// start.js
const spawn = require('child_process').spawn;
const proc = spawn('sleep', ['infinity']);
proc.stdout.pipe(process.stdout);
proc.stderr.pipe(process.stderr);
console.log('running');
如果我在一个终端上运行该程序
$ node start.js
running
然后在另一个终端中检查进程
$ ps aux | head -n1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
$ ps aux | grep node | grep start
steve 25917 0.5 0.1 562092 29096 pts/4 Sl+ 09:56 0:00 node start.js
$ ps aux | grep sleep | grep infinity
steve 25924 0.0 0.0 7472 780 pts/4 S+ 09:56 0:00 sleep infinity
如果我在原始终端中按ctrl + c,则这两个过程都消失了。
但是,如果我执行以下任一操作
$ kill 25917
$ kill -SIGINT 25917
然后节点进程停止,并从列表中消失,但是sleep infinity
进程没有。
所以我所有的问题是: -节点收到与接收SIGINT信号不同的ctrl-c信号时会做什么? -它是怎么做到的?它会抓住按键而不是信号吗?
最重要的是... -是否有办法使自己在后台运行的节点进程以及在我按ctrl + c的情况下都可以进行清理?