gpt4 book ai didi

node.js - 如何将 "CTRL+C"发送到 Node.js 中的子进程?

转载 作者:可可西里 更新时间:2023-11-01 11:47:16 26 4
gpt4 key购买 nike

我尝试生成子进程 - vvp ( https://linux.die.net/man/1/vvp )。在某个时间,我需要发送 CTRL+C 到那个进程。我期待模拟会被中断,我会得到交互式提示。之后我可以通过向子进程发送命令来继续模拟。所以,我尝试了这样的事情:

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 .

如果您想找到中间立场,当然有一种方法可以向您自己发送信号。这也意味着如果您的控制台已连接,您可以将 Ctrl+C 发送到进程。不用说,这是非常棘手的——您可能想要创建一个 native 主机进程,它除了创建一个控制台并运行您要运行的实际程序外什么都不做。然后您的主机进程将监听一个事件,并在发出事件信号时调用 GenerateConsoleCtrlEvent .

关于node.js - 如何将 "CTRL+C"发送到 Node.js 中的子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41976651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com