如何使用spawn在节点js中暂停进程

时间:2017-07-26 06:32:44

标签: javascript node.js process

有没有办法,如何在节点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。

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

发送信号:read this

但是什么信号? read this

答案 2 :(得分:0)

只需使用readline包,您基本上就可以轻松使用这些功能

暂停流程

rl.pause()

恢复过程

rl.resume()

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

Resume - node.js docs

Pause - node.js docs

答案 3 :(得分:0)

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

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');