我正在尝试在node.js中运行一个交互式子shell程序,其中主进程在子进程完成时退出。如果我这样做,它的效果非常好:
var spawn = require('child_process').spawn;
var child = spawn('npm', ['init'], { stdio: 'inherit' });
但是,我想做一个手动实现,但是在子程序完成后我遇到了终止进程的问题。这就是我所在的地方:
var spawn = require('child_process').spawn;
var child = spawn('npm', ['init']);
process.stdin.on('data', function (data) {
console.log('process.stdin!');
child.stdin.write(data);
});
child.stdout.on('data', function (data) {
console.log('child.stdout!');
process.stdout.write(data);
});
// doesn't fire
child.on('close', function (code) {
console.log('child process exited with code ' + code);
process.exit(code);
});
// doesn't fire
child.on('disconnect', function (code) {
console.log('child process exited with code ' + code);
process.exit(code);
});
// doesn't fire
child.on('exit', function (code) {
console.log('child process exited with code ' + code);
process.exit(code);
});
我对shell脚本的了解相当有限,我不清楚子进程是否表明它已完成,如果我必须听另一种类型的退出事件,或者我的整个方法是否适用于此用例是有缺陷的。期望的行为是在子进程完成之后主进程退出(在这种情况下,在“npm init”完成所有问题之后)。这仅用于教育目的,请不要推荐抽象库。