【问题标题】:How to pause process in node js using spawn如何使用 spawn 在节点 js 中暂停进程
【发布时间】:2017-07-26 06:32:44
【问题描述】:

有什么办法,如何在节点js中暂停进程?

          const { spawn } = require('child_process');

          const process = spawn("run.cmd");

          process.stdout.on('data', (data) => {
            console.log(`stdout: ${data}`);
          });

          process.stderr.on('data', (data) => {
            console.log(`stderr: ${data}`);
          });

          process.on('close', (code) => {

          });

我想这样称呼:process.pause(), process.continue()

或者一些使用 cmd 的系统调用?

我正在使用 Windows。

感谢您的帮助。

【问题讨论】:

    标签: javascript node.js process


    【解决方案1】:

    您可以找出进程的PID,并使用linux命令根据PID暂停/恢复进程。
    您可以将代码更改为process = spawn(cmd & echo $! > txt)
    它会将您的 cmd 进程 PID 保存到 txt,然后您可以使用 fs 读取 PID。

    现在您有了 PID,运行 exec() 以暂停进程 kill -STOP <PID> 或恢复停止的 cmd kill -CONT <PID>
    这两个是unix命令,应该可以正常工作。

    【讨论】:

    • 更简单,你可以调用process.kill('SIGSTOP')暂停进程,调用process.kill('SIGCONT')恢复进程。
    【解决方案2】:

    我专门制作了一个库来暂停/恢复 Windows 上 Node.js 的进程,ntsuspend

    const { spawn } = require('child_process');
    const ntsuspend = require('ntsuspend');
    const process = spawn("run.cmd");
    ntsuspend.suspend(process.pid);
    ntsuspend.resume(process.pid);
    

    如果您使用的是 Linux 或 MacOS

    const { spawn } = require('child_process');
    const ntsuspend = require('ntsuspend');
    const process = spawn("run.cmd");
    process.kill('SIGSTOP');
    process.kill('SIGCONT');
    

    【讨论】:

      【解决方案3】:

      发送信号:read this

      但是什么信号? read this

      【讨论】:

        【解决方案4】:

        只要使用readline包,基本就可以轻松使用功能了

        暂停进程

        rl.pause()

        恢复进程

        rl.resume()

        如果您想了解更多信息,可以查看这两个地方

        Resume - node.js docs

        Pause - node.js docs

        【讨论】:

          猜你喜欢
          • 2022-11-01
          • 2017-06-17
          • 1970-01-01
          • 1970-01-01
          • 2016-12-11
          • 1970-01-01
          • 2018-03-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多