Как я могу завершить процесс или nstask при сбое приложения какао - PullRequest
0 голосов
/ 14 апреля 2019

Как я могу завершить процесс, запущенный приложением, когда приложение аварийно завершилось или уничтожено командой 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()
    }
}

Итак, есть ли способ убить подпроцесс, когда основное приложение аварийно завершено или уничтожено командой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...