【发布时间】:2020-06-06 19:52:11
【问题描述】:
我正在努力从 node 和 node-pty 中获得我想要的行为。执行此代码后,节点似乎没有完全退出。寻找关于我所缺少的东西的提示。我已经将事情提炼成一个小例子来演示。当你执行代码时,它会产生 /bin/sh。一旦你退出那个 shell,它就会产生第二个 /bin/sh (以同样的方式)。一旦你退出那个 shell,节点就会挂起。
let pty = require('node-pty');
main();
async function main() {
let ptyProcess;
console.log('Starting session 1');
ptyProcess = pty.spawn('/bin/sh');
await interact(ptyProcess);
ptyProcess.kill();
console.log('Starting session 2');
ptyProcess = pty.spawn('/bin/sh');
await interact(ptyProcess);
ptyProcess.kill();
console.log('Why won\'t I exit?');
}
function interact(ptyProcess) { // Allow user interaction from here on out
return new Promise((resolve, reject) => {
process.stdout.on('resize', () => {
ptyProcess.resize(process.stdout.columns, process.stdout.rows);
});
process.stdin.on('data', data => {
ptyProcess.write(data);
});
ptyProcess.on('data', data => {
process.stdout.write(data);
});
ptyProcess.on('close', () => {
console.log('Closing...');
resolve();
})
});
}
示例会话:
MacBook-Pro:src mtwomey$ node demo.js
Starting session 1
sh-3.2$ exit
exit
exit
Closing...
Starting session 2
sh-3.2$ exit
exit
exit
Closing...
Why won't I exit?
[node remains running / open here]
【问题讨论】:
-
我已经尝试了所有我能想到的方法(在关闭函数中)与 process.stdin、process.stdout、pty 等相关。我试过调用 end 和 close 以及 done 和 kiil 方法,将它们作为事件发出,......等等。我所做的一切似乎都不允许它自行关闭。
标签: node.js process pty node-pty