检测命令行工具何时退出

时间:2018-05-12 22:48:57

标签: swift xcode macos

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

修改

我在进程中调用/bin/sh tail -f myfile.log来观察日志文件。结束后,tail仍然在活动监视器中运行。

0 个答案:

没有答案