使用 stdin.write() 将 ctrl+c 发送到 node.js 生成子进程?

Posted

技术标签:

【中文标题】使用 stdin.write() 将 ctrl+c 发送到 node.js 生成子进程?【英文标题】:sending crtl+c to a node.js spawned childprocess using stdin.write()? 【发布时间】:2013-10-16 15:01:28 【问题描述】:

在节点脚本中,我生成了一个执行批处理文件 run.bat 的子进程,以终止由批处理文件启动的程序,我需要将 ctrl+c 组合发送到子进程,它是必需的我使用 stdin.write() 方法将 ctrl+c 组合发送到程序。

var hmc = require('child_process').spawn('cmd');
hmc.stdin.write('run.bat \n');

【问题讨论】:

【参考方案1】:

CTRL+C 相当于在 Windows 上发送SIGINT。与其尝试向进程发送击键,不如发送信号。这可以通过子进程方法或其他进程完成,前提是您具有子进程 ID:

hmc.kill('SIGINT');
// or from another process
process.kill(hmc.pid, 'SIGINT');

【讨论】:

nodejs.org/api/process.html#process_signal_events 请注意,Windows 不支持发送信号,但 node 提供了一些带有 process.kill() 和 child_process.kill() 的模拟: - 发送信号 0 可用于搜索进程的存在 - 发送 SIGINT、SIGTERM 和 SIGKILL 会导致目标进程无条件退出。 所以它不会是windows中的信号。您将立即终止该进程(而不是优雅地)。 @garkin 的评论是对的,信号没有发送,而是子进程被无条件杀死。

以上是关于使用 stdin.write() 将 ctrl+c 发送到 node.js 生成子进程?的主要内容,如果未能解决你的问题,请参考以下文章

pipe.stdin.write("stop\n") 中的管道损坏

python subprocess.popen stdin.write

如何中止在 python3 中等待 sys.stdin?

Python子进程错误:使用标准输入将输入传递到终端

将 Ctrl+C 事件发送到在 Windows 上使用 QProcess 启动的进程

Nodejs:将 Ctrl+C 发送到 Windows 上的子进程