node.js - 什么是Electron中ctrl + c的bash脚本等效?

标签 node.js bash electron

我到处都看了,不知道应该去哪里。

我想从正在从Electron调用的bash脚本中运行一个ctrl + c命令,但它似乎不起作用。

我精简了代码,使其更易于阅读:

我的index.js文件

var electron = require("electron");
var ipc = electron.ipcRenderer;
var shell = require('electron').shell;
var remote = require('electron').remote
var fs = require('fs');
var path = require('path');
var spawn = require('child_process').spawn;

function runScript(index) {
    var bashScriptRun = spawn('/bin/sh', [directory/runScript.sh]);

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

function cancelScript() {
    var cancelBashScript = spawn('/bin/sh', [directory/cancelScript.sh]);

    cancelBashScript.stdout.on('data', function (data) {
        console.log(data.toString())
    });
}
cancelScript.sh文件
# Get its PID
PID=$!
# Wait for 2 seconds
sleep 2
# Kill it
kill $PID

即使已调用cancelScript.sh,console.log也会确认脚本继续运行。
另外,当我尝试回显PID($!)变量时,它会记录一个空字符串。

我究竟做错了什么?

我可以在哪里学习bash脚本/SIGINIT/etc的任何指南?

我仍然无法解决它或到目前为止找到的文档。

谢谢,全部

非常感谢您的帮助

最佳答案

$!将获取当前shell最近启动的后台进程的pid,但是当前shell尚未启动,因此为空白。

如果要获取从Node.js开始的进程的pid,则必须询问Node.js。在这种情况下,您可以使用bashScriptRun.pid获得它

如果希望pid在cancelScript.sh中可用,则可以重写index.js以将其作为参数传递给脚本。

如果这太棘手,则可以使用killall runScript.sh杀死具有该名称的任何内容。

关于node.js - 什么是Electron中ctrl + c的bash脚本等效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57300075/

相关文章:

bash - 通过SSH在远程Linux服务器上运行命令时,用BASH代替CSH

bash - 为什么 sed replace + redirect 删除了我的文件?

iframe - 在Electron中禁用同源策略(需要与iframe一起使用)

node.js - firebase 的 package.json 依赖项

node.js - 创建一个功能 Jade

linux - 使用命令行在启动后捕获进程的 STDIN/STDERR/STDOUT?

javascript - 下载文件时 Node 渲染进程消失

javascript - 无法使用 IPC 与 electrojs-angularjs 进行通信

node.js - Nodejs Sharp 图像调整大小并上传到 S3 超时

node.js - 请求未分布在其工作进程中