Определите, когда инструмент командной строки выйдет - PullRequest
0 голосов
/ 13 мая 2018

Я создаю утилиту командной строки в Swift. В main.swift у меня есть класс, который открывает процесс с Process. Пока этот процесс не запущен, мое приложение также должно работать. Я добиваюсь этого по телефону:

let sema = DispatchSemaphore(value: 0)

let myClass = MainClass(..., errorHandler: {
    print("anything went wrong here, so end the application")
    sema.signal()   // ends this programm
})

sema.wait()

Это работает довольно хорошо ... когда вызывается errorHandler, sema.signal() завершает мой инструмент. Но как я могу иметь противоположный путь? Когда я заканчиваю свое приложение вручную (в XCode), процесс продолжает выполняться.

У меня есть этот код, чтобы открыть процесс:

self.task = Process()
self.task!.executableURL = runURL
self.task!.currentDirectoryURL = directoryURL
self.task!.arguments = arguments
// The ouput of the process
let errorPipe = Pipe()
let outputPipe = Pipe()
self.task!.standardError = errorPipe
self.task!.standardOutput = outputPipe
self.errorHandler = errorPipe.fileHandleForReading
self.outputHandler = outputPipe.fileHandleForReading

self.errorHandler!.readabilityHandler = { pipe in
  ...
  errorHandler()
}

self.outputHandler!.readabilityHandler = { pipe in
  ...
}

try? self.task!.run()

EDIT

Я звоню /bin/sh tail -f myfile.log в процессе наблюдения за лог-файлом. После завершения tail все еще работает в мониторе активности.

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