Как я могу завершить процесс, запущенный приложением, когда приложение аварийно завершилось или уничтожено командой kill -9 pid
Я пишу приложение Macos GUI, которое запускает Redis-сервер. Я использую Process
для запуска Redis-сервера. Но когда приложение упало или было убито командой, Process
, запущенный приложением, не прекратит работу.
import Cocoa
import Foundation
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var task = Process()
func applicationDidFinishLaunching(_ aNotification: Notification) {
// start the redis-server
let bundlePath = Bundle.main.bundlePath
let redisServerPath = bundlePath.appending("/Contents/Resources/redis-server")
let redisConfigPath = bundlePath.appending("/Contents/Resources/redis.conf")
print(Bundle.main.bundlePath.appending("/Contents/Resources/redis-server"))
if #available(OSX 10.13, *) {
task.executableURL = URL(fileURLWithPath:redisServerPath)
} else {
task.launchPath = redisServerPath
}
task.arguments = [redisConfigPath]
print(getpid())
if #available(OSX 10.13, *) {
do {
try task.run()
} catch {
print("\(error)")
}
} else {
task.launch()
}
print(task.processIdentifier)
processId = task.processIdentifier
}
func applicationWillTerminate(_ aNotification: Notification) {
// when the application stop normally ,this func will trigger,but when crash or kill by command, this fucn will never trigger
print("closing")
task.terminate()
task.waitUntilExit()
}
}
Итак, есть ли способ убить подпроцесс, когда основное приложение аварийно завершено или уничтожено командой.