为什么在节点处理之后ctrl + c会比SIGINT好

时间:2019-07-10 08:07:48

标签: node.js linux spawn

当我按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的情况下都可以进行清理?

0 个答案:

没有答案