在Swift4中捕获系统信号

时间:2017-10-21 11:17:46

标签: swift signals

我正在开发一个使用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)
        }
    }

}

0 个答案:

没有答案