Electron kill child_process.exec

后端 未结 3 976
旧巷少年郎
旧巷少年郎 2021-02-04 05:15

I have an electron app that uses child_process.exec to run long running tasks. I am struggling to manage when the user exits the app during those tasks.

I

3条回答
  •  名媛妹妹
    2021-02-04 05:45

    So after everyones great comments I was able to update my code with a number of additions to get it to work, so am posting my updates for everyone else.

    1) Change from child_process.exec to child_process.spawn

    var loader = child_process.spawn('program', options, { detached: true })

    2) Use the Electron ipcRenderer to communicate from my module to the main.js script. This allows me to send the PIDs to main.js

    ipcRenderer.send('pid-message', loader.pid);

    ipcMain.on('pid-message', function(event, arg) {
      console.log('Main:', arg);
      pids.push(arg);
    });
    

    3) Add those PIDs to array

    4) In my main.js I added the following code to kill any PIDs that exist in the array before exiting the app.

    // App close handler
    app.on('before-quit', function() {
      pids.forEach(function(pid) {
        // A simple pid lookup
        ps.kill( pid, function( err ) {
            if (err) {
                throw new Error( err );
            }
            else {
                console.log( 'Process %s has been killed!', pid );
            }
        });
      });
    });
    

    Thanks for everyones help.

提交回复
热议问题