我在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仍然在活动监视器中运行。