我是Swift的新手,因此为了学习我正在尝试使用Process
运行节点服务器的代码来创建命令行嘟嘟声。这里的问题是,当我退出程序时,节点进程仍在运行,并且我想在退出程序或即将退出程序时结束它。
import Foundation
let port = "3030"
let process = Process.launchedProcess(launchPath: "/usr/local/bin/node", arguments: ["/path/to/file/index.js"])
print(process.processIdentifier)
我发现了如何获取进程的PID,但我不知道如何在退出时或即将退出时将其杀死。
修改
process.terminate()
可以工作,但是我想要的行为是保持程序运行,直到它被手动杀死(ctrl + c
),从而杀死它的节点进程。我可以使用waitUntilExit()
来保持程序运行,但是,如果我使用terminate()
,则无法使用waitUntilExit()
。
答案 0 :(得分:0)
根据this answer的建议:
import Foundation
// Start the Node process...
signal(SIGINT, SIG_IGN)
let sigintSource = DispatchSource.makeSignalSource(signal: SIGINT, queue: .main)
sigintSource.setEventHandler {
process.terminate() // Terminate the Node process
exit(0)
}
sigintSource.resume()