gpt4 book ai didi

javascript - 使用 Node.js 子进程时没有回车?

转载 作者:太空宇宙 更新时间:2023-11-04 02:13:32 25 4
gpt4 key购买 nike

我有一个 Node.js 脚本,它运行来执行一些数据库操作。我使用 spawn 功能创建了几个子进程。奇怪的是,我的输出中不再出现回车符。例如:

running...
more output.
more output.
complete.

设置如下:

  • 主要父进程:启动通过管道传输到发球台的子进程
    • 主要子进程:执行大部分数据库事务
      • 子进程 1:打开 VPN 隧道并在整个执行过程中保持运行
      • 子进程 2:运行一个简短的脚本然后终止

我以这种方式生成子进程:

var spawn = require('child_process').spawn;
STATE.childProcesses.logged = spawn('sh',['-c', cmd],{
stdio: [0]
});

STATE.childProcesses.logged.stdout.on('data', function (data) {
process.stdout.write(data.toString().replace(/\n/g, "\r\n"));
});

STATE.childProcesses.logged.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});

STATE.childProcesses.logged.on('exit', function (code) {
console.log('main child process exited with code ' + code);
});

我能够通过对子进程的标准输出数据执行 .replace(/\n/g, "\r\n") 来解决这个问题,如上所示。

但是,现在当主父进程终止时,它运行的 bash shell 遇到了类似的问题:它既不输出回车符也不输出换行符。我输入的文本也不会显示。如果我关闭它在 (Mac OSX) 中运行的终端窗口并重新打开,问题就会消失。

我可以验证当父进程终止时,所有子进程也会终止。至少,我对所有这些进程调用 .kill('SIGINT') 并且我能够关闭终端,而不会收到任何有关子进程终止的警告。

我想知道它是否与生成进程的 stdio 路由有关,但无法弄清楚。非常感谢任何提示!

最佳答案

通过小心子进程终止,我能够解决 bash 在执行后搞砸的问题。事实证明,我没有正确终止其中一个子进程,一旦我在结束父进程之前确定它已经死亡,bash 问题就消失了。

我从来没有弄清楚为什么我需要.replace(/\n/g, "\r\n")

关于javascript - 使用 Node.js 子进程时没有回车?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36898114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com