持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
1.安装child_process
npm install child_process --save
child_process 子进程
在node中,child_process这个模块非常重要。掌握了它,等于在node的世界开启了一扇新的大门。熟悉shell脚本的同学,可以用它来完成很多有意思的事情,比如文件压缩、增量部署等,nodejs创建子进程有四种方法,分别是
spawn、fork、exec、execFile。区别 :
格式 : spawn和execFile的格式都是(command,[args]);fork的参数直接(文件名);exec的command相当于spawn的command+args;
回调 : spawn和fork没有直接的回调。spawn通过事件监听处理; fork相当于直接执行一个node程序;其余两个有回调,回调的参数为error,stdout,stderr;
作用 : [这里我也不是很明白,引用网上的],fork用于启动一个node进程,可以进程进程之间通信;execFile用于执行一个外部应用;spawn方法会在新的进程执行外部应用;exec这个方法将会生成一个子shell,能够在shell中执行命令。
2. 在package.json指向的主进程中
// 控制应用生命周期和创建原生浏览器窗口的模组
const {
ipcMain
} = require('electron')
// 多进程测试
const cp = require("child_process")
let mySpawn = new Array()
ipcMain.on('open-apifox', (e, msg) => {
console.log('打开进程 -> mainProcess:' + msg)
const spawn = cp.spawn(msg)
cps[cps.length] = spawn
e.sender.send('cp-reply', '打开进程:' + msg)
})
ipcMain.on('kill-apifox', (e, msg) => {
console.log('关闭进程 -> mainProcess:' + msg)
e.sender.send('cs-reply', '正在关闭所有打开的应用')
// 收到消息,关闭所有进程
for(i = 0; i < cps.length; i++) {
cps[i].kill()
}
cps = new Array()
})
ipcMain模块是类EventEmitter的实例.当在主进程中使用它的时候,它控制着由渲染进程(web page)发送过来的异步或同步消息.从渲染进程发送过来的消息将触发事件.详细说明请查看www.cnblogs.com/zyl-Tara/p/…
**3. 在render渲染层中,触发事件引用外部的exe应用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div style="font-weight: bolder">3.打开外部程序,并监听消息</div>
<div class="form-group">
<input class="form-control" type="text" name="txt_exe" id="openApifox" style="width:600px"
placeholder="输入带路径的外部程序的名称" value="D:\apifox\apifox.exe" />
<div><button onclick="ChildProcess(true)">打开应用</button> <button onclick="ChildProcess(false)">关闭所有应用</button>
</div>
</div>
</body>
<script>
const ipcRenderer = require('electron').ipcRenderer
ipcRenderer.on('cs-reply', (e, msg) => document.getElementById('openApifox').value = msg )
function ChildProcess(isopen) {
// 发消息,由html的按钮调用,给主进程发消息,回调中关闭进程
let appname = ""
if (isopen) {
appname = document.getElementById('openApifox').value
console.log(appname)
ipcRenderer.send('open-apifox', appname)
} else ipcRenderer.send('kill-apifox', appname)
}
</script>
</html>
最后
公众号:
小何成长,佛系更文,都是自己曾经踩过的坑或者是学到的东西有兴趣的小伙伴欢迎关注我哦,我是:
何小玍。大家一起进步鸭