如何在反应电子中杀死特定的子进程

How to kill specific child process in react-electron

我的电子应用程序由“2 个你好”按钮和 2 个 'cancel' 按钮组成。每个 'hello' 按钮将触发一个执行相同功能的子进程,取消按钮将终止子进程。

我的问题是第二个“你好”按钮触发的功能可以被第一个取消按钮终止。

我只想要第一个 'cancel' 按钮将仅终止第一个 'hello' 按钮的子进程,依此类推。

如有任何建议和帮助,我们将不胜感激。 谢谢

我的用户界面:

我在 electron 上的代码:

let process = null

ipcMain.on("runScript", (event, data) => {
   process = spawn('node helloworld.js', [], { shell: 
    true })
  });

ipcMain.on("killScript", (event, data) => {
    console.log(process)
    kill(process.pid, 'SIGKILL')


});

在我的客户端:

<div>
  <button onClick={() => ipcRenderer.send('runScript')}>hello</button>
  <button onClick={() => ipcRenderer.send('killScript')}>cancel</button>
</div>

有一点你需要注意,因为你试图生成多个进程,你需要将它们存储在一个数组而不是一个变量中,或者有 2 个变量,每个 button/process 生成一个,因为之前在 process 变量中的进程在每次单击两个 hello 按钮中的任何一个时都会被覆盖,因为它们发出相同的事件并且将被 cancel 中的任何一个终止按钮。

如果您要拥有相同数量的按钮,即只有您创建的两个按钮,请执行以下操作:

// Backend
let process1, process2 = null

ipcMain.on("runScript", (event, data) => {
   if(data.process == 1) process1 = spawn('node helloworld.js', [], { shell: 
    true });
   else if(data.process == 2) process2 = spawn('node helloworld.js', [], { shell: 
    true })
   
  });

ipcMain.on("killScript", (event, data) => {
    if(data.process == 1) {
       kill(process1.pid, 'SIGKILL');
    } else if (data.process == 2) kill(process2.pid, 'SIGKILL');    
});
// Client side
<div>
  <button onClick={() => ipcRenderer.send('runScript', {process: 1})}>hello</button>
  <button onClick={() => ipcRenderer.send('killScript', {process: 1})}>cancel</button>
</div>
<div>
  <button onClick={() => ipcRenderer.send('runScript', {process: 2})}>hello</button>
  <button onClick={() => ipcRenderer.send('killScript', {process: 2})}>cancel</button>
</div>

如果您要拥有可变数量的按钮,则需要在后端仅使用一个数组来实现相同的解决方案,并且 {process: processNumber} 还需要对应于流程中的正确流程后端数组。