【发布时间】:2019-01-06 19:02:28
【问题描述】:
我是 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() 保持程序运行,但是,如果我使用waitUntilExit(),则使用terminate() 将不起作用。
【问题讨论】:
-
如果它没有响应 SIGTERM(即
process.terminate()),那么它可能取决于节点进程本身。如果程序忽略了 SIGTERM,那么您要么需要重新编写它以不这样做,要么使用 SIGKILL。通常,您宁愿在可能的情况下使用 SIGTERM。 -
请注意,
Process.launchedProcess在 10.13 中已弃用,并替换为Process.run。在这里可能无关紧要,但值得注意。 -
@RobNapier 啊,谢谢你的来信。我应该解释得更好,
process.terminate()确实有效。将编辑原始帖子解释得更好。
标签: swift macos command-line