我有一个带有URL模式处理程序的Cocoa应用程序。它在一个进程中运行节点服务器(node server.js)。服务器启动后,我将在默认浏览器中打开一个选项卡。触发几下后,Chrome浏览器崩溃。
我用于启动过程和打开浏览器的代码
let command = cd + " && " + "export PATH=/usr/local/share/npm/bin:/usr/local/bin:/usr/local/sbin:~/bin:$PATH && node server.js"
let out = shell(command)
func shell(_ command: String) -> String {
let terminal = Process()
terminal.launchPath = "/usr/bin/env"
terminal.arguments = ["bash", "-c", command]
let pipe = Pipe()
terminal.standardOutput = pipe
terminal.launch()
openUrl()
return ""
}
func openUrl(){
print("open url called")
if let url = URL(string: "https://my.domain.com"),
NSWorkspace.shared.open(url) {
print("default browser was successfully opened")
}
}
我没有使用Swift或类似语言的经验。
我假设每次let terminal = Process()
都会创建一个新进程。
浏览器变得超载并崩溃,因为创建了越来越多的进程。
现在,如果我想删除或类似ctrl + c的openUrl方法中的进程,我该如何实现。我尝试了terminal.terminate()。它立即使浏览器崩溃。我最大的困惑是,为什么浏览器会因为应用程序而受到影响