【发布时间】:2017-01-14 12:10:46
【问题描述】:
我有一个 shell 脚本 start.sh,它的工作是在后台生成多个 java 进程,然后像这样正常退出:
java -jar jar1.jar &
java -jar jar2.jar &
...
exit 0
打印一堆输出:
Starting jar1
Starting jar2
...
现在我希望 nodejs 调用 start.sh 来跟踪输出,以便在 starter.sh 完成时对它采取行动
问题是 Nodejs 认为 starter.sh 只有在所有已启动的 java 进程都死了时才完成。
这很奇怪,因为从 shell 中,starter.sh 立即退出并且不再与 java 进程有任何关系
如何使starter.sh 从节点调用时的行为方式相同?
这是我用来生成starter.sh的代码:
const process = spawn('starter.sh', []);
process.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
// prints 'Starting jarx' like expected
});
process.stderr.on('data', (data) => {
console.log(`stderr: ${data}`);
});
process.on('close', (code) => {
console.log(`child process exited with code ${code}`);
// Not called unless all the spawned java processes are dead :(
});
【问题讨论】:
标签: node.js shell child-process spawn