如何在退出之前终止进程?

时间:2019-01-06 19:02:28

标签: swift macos command-line

我是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()

1 个答案:

答案 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()