如何在 Node.js 中向子进程发送“CTRL+C”?

2024-03-02

I tried to spawn child process - vvp (https://linux.die.net/man/1/vvp https://linux.die.net/man/1/vvp). At the certain time, I need to send CTRL+C to that process. I am expecting that simulation will be interrupted and I get the interactive prompt. And after that I can continue the simulation by send command to the child process. So, I tried something like this:

var child = require('child_process');
var fs = require('fs');
var vcdGen = child.spawn('vvp', ['qqq'], {});

vcdGen.stdout.on('data', function(data) {
  console.log(data.toString())
});

setTimeout(function() {
  vcdGen.kill('SIGINT');
}, 400);

在这种情况下,子进程被停止。 我也尝试过vcdGen.stdin.write('\x03')代替vcdGen.kill('SIGINT');但这行不通。

也许是因为Windows? 有什么方法可以实现与我在 cmd 中获得的相同的行为吗?


kill仅真正支持 Windows 上的粗鲁进程终止 - Windows 和 *nix 中的应用程序信号模型不兼容。你无法通过Ctrl+C通过标准输入,因为它永远不会通过标准输入 - 它是控制台子系统的功能(因此只有当进程具有附加控制台时才能使用它)。它在子进程中创建一个新线程来完成其工作。

没有受支持的方法可以以编程方式执行此操作。这是针对用户的功能,而不是针对应用程序的功能。执行此操作的唯一方法是执行与控制台子系统相同的操作 - 在目标应用程序中创建一个新线程并让它执行信号发送。但最好的方法是简单地使用协作信号 - 尽管这当然需要您更改目标应用程序以理解信号。

如果你想走完全不受支持的路线,请看看https://stackoverflow.com/a/1179124/3032289 https://stackoverflow.com/a/1179124/3032289.

如果你想找到中间立场,有一种方法可以向yourself, 当然。这也意味着如果您的控制台已连接,您可以将 Ctrl+C 发送到进程。不用说,这非常棘手 - 您可能想要创建一个本机主机进程,它除了创建控制台并运行您想要运行的实际程序外什么也不做。然后,您的主机进程将侦听事件,当事件发出信号时,调用生成控制台Ctrl事件 https://msdn.microsoft.com/en-us/library/ms683155%28v=vs.85%29.aspx.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Node.js 中向子进程发送“CTRL+C”? 的相关文章

  • 如何将多个 api 请求中的多个可读流传输到单个可写流?

    期望的行为 实际行为 我尝试过的 重现步骤 研究 期望的行为 将从多个 api 请求接收到的多个可读流传输到单个可写流 API 响应来自 ibm watsontextToSpeech synthesize https cloud ibm c
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 全局传递 xhr onload 函数的值

    在我正在创建的应用程序中 我有以下 XMLHttpRequest 并且我正在尝试传递结果data在 的里面xhr onload 到在同一父函数中创建的数组中 var url http api soundcloud com resolve j
  • Meteor.setTimeout 和 Meteor.methods 之间的并发

    在我的 Meteor 应用程序中实现回合制多人游戏服务器 客户端通过发布 订阅接收游戏状态 并且可以调用 Meteor 方法sendTurn将回合数据发送到服务器 他们无法直接更新游戏状态集合 var endRound function g
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • 呃!尝试将包发布到 npm 时出现 403

    我正在尝试将包发布到 npm 您可以在此处查看存储库 https github com biowaffeln mdx state https github com biowaffeln mdx state 我登录到 npmnpm login
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • 使用socket.io进行用户身份验证

    我已经红色了这个教程 http howtonode org socket io auth http howtonode org socket io auth 它展示了如何使用express和socket io对用户进行身份验证 但是有没有一
  • Windows 窗体中的标准 Windows 菜单栏

    我注意到添加了一个MenuStrip 来自工具箱 我的表单设计不会产生像许多本机 Windows 应用程序中那样的菜单栏 相反 我得到了一个像 Visual Studio 自己的菜单栏 没有任何样式设置MenuStrip似乎模仿了更常见的本
  • 如何使用 Create-React-App 节点服务器定义 MIME 类型?

    我正在尝试处理这个 WebAssembly 注释 注意 要运行instantiateStreaming and compileStreaming 您需要您的网络服务器来提供 wasm 文件application wasmMIME 类型 ht
  • Windows 上的 ffmpeg-android ndk

    我正在尝试编译 bash 文件 带有 android ndk 的 ffmpeg 我收到如下错误 arm linux androideabi gcc 无法创建可执行文件 C 编译器测试失败 Makefile 2 config mak 没有这样
  • 使用 React.js + Express.js 发送电子邮件

    我在 ES6 中使用 React js 构建了一个 Web 应用程序 我目前想要创建一个基本的 联系我们 页面并想要发送电子邮件 我是 React 新手 刚刚发现我实际上无法使用 React 本身发送电子邮件 我正在遵循教程nodemail
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • Node.js 重写 toString

    我试图覆盖我的对象的默认 toString 方法 这是代码和问题 function test this code 0 later on I will set these this name test prototype toString f
  • Sequelize - 使用 es6 和模块运行迁移

    我不确定我是否做错了什么或者什么 我觉得我正在运行一个现代的 相当常见的堆栈 但我无法让新的 Sequelize v6 与我的设置完美配合 我在 Node v14 17 Sequelize v6 6 2 上 在我的 package json
  • Windows 8 Metro 应用程序(网格应用程序)过渡时出现黑色闪烁

    我正在基于网格应用程序模板构建 Windows 8 Metro 应用程序 一切都很顺利 直到我尝试更改应用程序的主题和背景 我将图像背景应用于所有 3 个 XAML 页面的网格 另外 我在应用程序包清单中将主题更改为 Light 但它没有执
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • NodeJS hmac 摘要问题与重音

    我正在对以下代码与 Ruby PHP 和 NodeJS 进行并排比较 使用 NodeJS 得到错误的响应crypto module PHP hash hmac sha256 text Ruby OpenSSL HMAC hexdigest
  • 从其可执行文件的路径获取服务名称

    我有一个可执行文件的路径 它是一个正在运行的服务应用程序 例如 C Program Files x86 Someapp somesvc exe 我想停止并启动它 为此我想我需要获取服务的名称 如下所示 this https stackove

随机推荐

  • 节省内存和编译时间

    有什么方法可以使用模块在 perl 中节省内存和编译时间吗 例如 不加载所有不必要的 未使用的子程序 或者 如果我将我的潜艇分成许多不同的 这是一个好方法pm文件 然后我只加载必要的模块 例如 usr bin perl w sub mysu
  • mkdir() 不工作

    My code mkdir some absolute path 0777 and mkdir relative path 0777 不起作用 安全模式已关闭 我什至尝试将所有父文件夹设置为 777 有任何想法吗 编辑 我确实打开了错误报告
  • 如何从memfd_create获取内存地址?

    在我的应用程序中我需要共享内存 父母和孩子之间 使用fork execl 我用memfd create分配内存 因为它提供了 文件描述符 可以方便地在子进程中使用 进程 描述符通过dup2 before execl 附加到分配的内存 我不使
  • 扁平列表和免费 monad

    我试图说服自己 List monad 具有平面列表 列表串联和按元素映射的列表 不是一个自由 monad 准确地说 是与某个函子 T 关联的自由 monad 据我了解 我应该能够通过以下方式实现这一目标 首先在 monad 列表中找到常用运
  • 如何将 JSON 转换为 GeoJSON

    我对 javascript 的学习还很陌生 我的基础知识已经碰壁了 我已经设置了一个传单地图 我希望从 JSON 中的绳索上绘制基于 divIcon 的标记 通过我无数次的研究 试图让它发挥作用 我了解到为什么我的 JSON 文件无法工作
  • Matplotlib imshow 中内存使用过多

    我有一个 PyQT4 应用程序 可以在 Matplotlib 图中显示中等大小的图像 我显示的测试图像约为 5Mb 2809 x 1241 像素 顺便说一下 我使用GDAL读取数据 图像被读入数组 其中无数据值被屏蔽 然后用标准化值和指定的
  • NetworkX - 删除节点并重新连接边

    我在图中有一个节点 充当一种 临时连接器 节点 我想删除该节点并更新图中的边 以便其所有直接前驱节点都指向其直接后继节点 是否有内置功能可以做到这一点networkx 或者我需要推出自己的解决方案吗 Example 我有一个图表1 gt 2
  • Kubectl设置环境变量并运行命令

    我有一个在 Kubernetes 上运行的容器 我想在其中从本地终端运行命令 基于其 yaml 文件的容器的工作目录位于 opt gopath src a 但是 我想在目录中运行命令 opt gopath src b 此外 在运行此命令之前
  • OpenCV 和 Python 的书籍? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何关闭ViteJS的模块热加载功能?

    我有一个服务器端渲染production模式Vite应用 我的问题是 网页通常会重新加载并且控制台将显示 vite connecting 我将此追溯到 vite 代码库的热模块重新加载部分 然而 我不想hmr on for producti
  • ggbiplot - 如何不在图中使用特征向量

    我有一个数据集数据 cell line sva 其暗淡为 313 11875 cc pca lt prcomp data cell line sva center TRUE scale TRUE retx TRUE g lt ggbiplo
  • Spring Boot 和 Maven 战争叠加

    我正在使用 Maven 多模块 其中一场战争取决于另一场战争 Spring Boot Web 应用程序依赖于一个仅提供 html 文件的基本 Web 应用程序 当我运行 Spring Boot 应用程序时 我可以从主 web 应用程序 Sp
  • 在 Scala 中使用 json 对象的 play 框架

    你好 我是 scala play 框架的初学者 我创建了一个简单的注册表单并连接到 mysql 来插入行 效果很好 现在我想在同一页面上显示这些插入的行 而不使用 json 刷新页面 请建议我一个想法如何在同一页面上获取插入的行 提前致谢
  • 需要知道每个字段是否已更改,我应该如何在 Hibernate 中对此进行建模

    所以我有一个包含三个字段的类 使用 hibernate 映射到一个表 Class Widget String field1 String field2 String field3 在应用程序启动时 许多实例这些小部件将从外部文件添加到数据库
  • 检索 SQL Server 中的日期; CURRENT_TIMESTAMP 与 GetDate()

    使用 SQL Server 哪一种是用于日期检索的最快或最佳实践方法 之间有区别吗CURRENT TIMESTAMP and GetDate CURRENT TIMESTAMP是标准的 ANSI SQL 因此理论上 如果您需要移动数据库 它
  • 正则表达式:用括号分割忽略引号内的嵌套括号

    我的程序将 SQL VALUES 多行字符串解析为单行字符串数组 典型的输入字符串如下所示 11 1 Service A nested parentheses en 22 2 Service B nested parentheses en
  • Rails:设计:用户确认注册后发送电子邮件

    我的应用程序正在使用 Devise 并且正确发送确认电子邮件 并在用户单击确认链接后正确确认用户 我还想在用户确认后发送第二封电子邮件 关于如何延迟确认或两步确认有很多建议 但没有关于我正在寻找的内容 我可以找到 Devise Module
  • 如何将 HTML 代码添加到 JSF FacesMessage

    默认情况下 每个 JSFFacesMessage以单行形式呈现 我想添加 HTML 换行符 br 消息本身 以便消息显示整齐 我尝试过如下 message new FacesMessage test br test 然而 它被 JSF 转义
  • 如何在另一个方法中的方法中使用局部变量?

    private void UserYoutubeService var youtubeService new YouTubeService new BaseClientService Initializer HttpClientInitia
  • 如何在 Node.js 中向子进程发送“CTRL+C”?

    I tried to spawn child process vvp https linux die net man 1 vvp https linux die net man 1 vvp At the certain time I nee