【问题标题】:Can't get node to exit fully after using pty / process.stdin / process.stdout使用 pty / process.stdin / process.stdout 后无法让节点完全退出
【发布时间】: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


【解决方案1】:

事实证明,这与 node-pty 完全无关。它是直接的 process.stdin。

process.stdin.unref() 是我需要的。

【讨论】:

  • 如何杀死一个现有的 node-pty spawn 并重新生成一个新的 node-pty spawn?
猜你喜欢
  • 2020-06-29
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2012-12-29
  • 2020-03-09
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
相关资源
最近更新 更多