簡體   English   中英

使用 pty / process.stdin / process.stdout 后無法讓節點完全退出

[英]Can't get node to exit fully after using pty / process.stdin / process.stdout

我正在努力從 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();
        })
    });
}

示例 session:

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]

事實證明,這與 node-pty 完全無關。 這是直接的 process.stdin。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM