如何使用Node的child_process从Electron应用程序中取消bash命令/脚本?

时间:2019-10-10 05:21:31

标签: node.js electron child-process spawn

我正在与Wraith一起运行一个电子应用程序。我正在使用节点的child_process,它的工作原理非常好,除了取消bash脚本/命令外。
我一直没有找到适合我的在线解决方案。

我想运行一个基本上与ctrl + c类似的命令,但是要从我的Electron应用程序中运行。

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

我的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 directory = __dirname + '/src/bash/';

    // Works as expected
    var vrt = spawn('/bin/sh',
        [directory + task, arg1, arg2]);

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

    //This doesn't work
    setTimeout(function () {
        console.log("should close")
        vrt.kill();
    }, 1000)
}

即使已调用vrt.kill(),console.log也会确认脚本继续运行。

在搜索答案期间,此方法弹出了几次。有人知道我在做什么错吗?

谢谢,全部

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

尝试一下。

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 directory = __dirname + '/src/bash/';

    // Works as expected
    var vrt = spawn('/bin/sh',
        [directory + task, arg1, arg2]);

vrt.stdout.on('data', function (data) {
        console.log(data.toString())
        vrt.stdin.pause();
        vrt.kill();
    });

}    

谢谢:https://stackoverflow.com/a/18694940/12167785