我的代码中有一个位置,我需要生成一个bash脚本,写入其标准输入,并从其标准输出中读取。
我使用节点child_process.spawn
。
不幸的是,当我在pm2
下运行此代码时,bash脚本会在调用mkdir
时永久挂起。
有没有办法避免这个问题?
test.js
'use strict';
const child_process = require('child_process');
setInterval(() => {
const process = child_process.spawn('./test.sh');
process.on('exit', () => {
console.log('process exit');
});
process.stdout.on('data', (data) => {
console.log('Output: ' + data.toString('utf8'));
});
}, 1000);
test.sh
#!/usr/bin/env bash
TEMP=$(mktemp -d);
echo "Created directory $TEMP"
rm -rf ${TEMP}
echo "Deleted directory $TEMP"
预期输出
Starting
Spawning test.sh
Output: Created directory /tmp/tmp.I6Buifdmlu
Output: Deleted directory /tmp/tmp.I6Buifdmlu
process exit
实际输出
[STREAMING] Now streaming realtime logs for [test] process
2|test | Spawning test.sh
2|test | Spawning test.sh
环境
操作系统:Ubuntu 14.04
节点:4.7.3
PM2:2.4.0
注意:我在Mac OSX上测试了这个并没有问题