不同的信号代码代表不同的含义,有很多信号,其中最常见的一些是用来杀死进程的。如果一个进程接收到一个它不知道如何处理的信号,程序就会被异常中断。有些信号会被子进程处理,而有些只能由操作系统处理。
一般情况下,你可以使用child.kill方法来向子进程发送一个信号,默认发送SIGTERM信号:
复制代码 代码如下:
var spawn = require('child_process').spawn;
var child = spawn('sleep', ['10']);
setTimeout(function() {
child.kill();
}, 1000);
还可以通过传入一个标识信号的字符串作为kill方法的唯一参数,来发送某个特定的信号:
复制代码 代码如下:
child.kill(‘SIGUSR2');
需要注意的是,虽然这个方法的名字叫kill,但是发送的信号并不一定会杀死子进程。如果子进程处理了信号,默认的信号行为就会被覆盖。用Node写的子进程可以像下面这样重写信号处理器的定义:
复制代码 代码如下:
process.on('SIGUSR2', function() {
console.log('Got a SIGUSR2 signal');
});
现在,你定义了SIGUSR2的信号处理器,当你的进程再收到SIGUSR2信号的时候就不会被杀死,而是输出“Got a SIGUSR2 signal”这句话。使用这种机制,你可以设计一种简单的方式来跟子进程沟通甚至命令它。虽然不像使用标准输入功能那么丰富,但是这方式要简单很多。
小结
这一章,学习了使用child_process.exec方法来执行外部命令,这种方式可以不使用命令行参数,而是通过定义环境变量的方式把参数传递给子进程。
还学习了通过调用child_process.spawn方法生成子进程的方式来调用外部命令,这种方式你可以使用输入流,输出流来跟子进程通信,或者使用信号来跟子进程通信以及杀死进程。
您可能感兴趣的文章: