使用 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