我正在开发一个使用Process
启动子进程的快速项目。我希望确保在父进程终止时终止所有这些进程。
我试图用达尔文的signal
方法做到这一点:
let task = Process()
task.launchPath = "/usr/bin/env"
task.arguments = [path] + self.args
task.standardOutput = outputPipe
outputPipe.fileHandleForReading.waitForDataInBackgroundAndNotify()
_ = interruptSignal.once {
if task.isRunning {
task.interrupt()
}
}
signal(SIGKILL) {signal in
print("ending with signal: \(signal)")
interruptSignal.emit()
}
但是传递给信号的闭包永远不会被执行。
我确定SIGKILL
被发送到父进程,因为当我在XCode上使用停止按钮时,我在控制台中看到了这一点:
Program ended with exit code: 9
我也从命令行尝试了kill -s KILL
,但仍然没有结果。
我缺少一些步骤吗?对于上下文,如果重要的话,这个过程正在通过XCode测试框架运行。
编辑每个请求添加的事件发射器实现
public class Event<T> {
...
public func emit(_ data:T) {
for observer in observers {
observer.action(data)
}
}
}