如何在反应电子中杀死特定的子进程
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}
还需要对应于流程中的正确流程后端数组。
我的电子应用程序由“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}
还需要对应于流程中的正确流程后端数组。