通用的跨平台信号处理程序。
swift-5.1-RELEASE 工具链(最新版本需要最低要求)swift-5.4-RELEASE 工具链(推荐)BlueSignals 2.0 及以上版本支持 Swift 5.1+。请查看 BlueSSLService 的旧版本以获取旧版本的 Swift。
要从命令行构建 Signals
% cd <path-to-clone>
% swift build
要将 BlueSignals 包含到 Swift Package Manager 包中,请将其添加到 Package.swift 文件中定义的 dependencies 属性中。您可以使用 majorVersion 和 minor 参数选择版本。例如
dependencies: [
.Package(url: "https://github.com/Kitura/BlueSignals.git", majorVersion: <majorVersion>, minor: <minor>)
]
要使用 Carthage 将 BlueSignals 包含到项目中,请在您的 Cartfile 中添加一行,其中包含 GitHub 组织和项目名称以及版本。例如
github "Kitura/BlueSignals" ~> <majorVersion>.<minor>
要使用 CocoaPods 将 BlueSignals 包含到项目中,只需将 BlueSignals 添加到您的 Podfile 中,例如
platform :ios, '10.0'
target 'MyApp' do
use_frameworks!
pod 'BlueSignals'
end
您需要做的第一件事是导入 Signals 框架。这可以通过以下方式完成
import Signals
Signals 提供了四 (4) 个类级别的 API。其中三 (3) 个用于捕获和处理操作系统信号。另一个函数允许引发信号。
SignalWatch 提供了一个接口,允许被捕获的信号通知多个“信号监视器”。 通过这种方式,信号陷阱可以在同一应用程序中的库之间共享。 在大多数情况下,这可以直接替代 trap()。
当通过 SignalWatch 添加信号时,它将通过 trap() 在该信号上安装自己的处理程序。 因此,在使用 SignalWatch 时,重要的是不要直接使用 trap()。 如果信号的所有观察者都被移除,SignalWatch 将智能地恢复在 SignalWatch 之前安装的处理程序。
import Signals
...
let server: SomeServer = ...
SignalWatch.shared.on(signal: .int) { _ in
server.shutdownServer()
}
server.run()
trap(signal signal: Signal, action: SigActionHandler) - 这个基本 API 允许您为特定信号设置和指定处理程序。下面的示例展示了如何向服务器添加 trap 处理程序,以便在用户按下 ^C(向进程发送 SIGINT)时执行有序关闭。
import Signals
...
let server: SomeServer = ...
Signals.trap(signal: .int) { signal in
server.shutdownServer()
}
server.run()
此外,还提供了基于上述基本 API 构建的便捷 API,这些 API 允许捕获多个信号,每个信号对应一个单独的处理程序或一个公共处理程序。
trap(signals signals: [(signal: Signal, action: SigActionHandler)]) - 这允许您在单个函数调用中将多个信号捕获到单独的处理程序。trap(signals signals: [Signal], action: SigActionHandler) - 此 API 允许您将多个信号捕获到公共处理程序。raise(signal signal: Signal) - 此 API 用于向您的应用程序发送操作系统信号。此示例说明了如何使用 Signals 向操作系统引发信号,在本例中为 SIGABRT。
import Signals
...
Signals.raise(signal: .abrt)
func ignore(signal: Signal) - 此 API 用于忽略操作系统信号。此示例说明了如何使用 Signals 忽略操作系统信号,在本例中为 SIGPIPE。
import Signals
...
Signals.ignore(signal: .pipe)
func restore(signal: Signal) - 此 API 用于恢复操作系统信号的默认处理程序。此示例说明了如何使用 Signals 恢复信号的默认处理程序,在本例中为 SIGPIPE。
import Signals
...
Signals.restore(signal: .pipe)
此示例显示了如何添加用户定义的信号,为其添加 trap 处理程序,然后引发信号。
import Signals
let mySignal = Signals.Signal.user(20)
Signals.trap(signal: mySignal) { signal in
print("Received signal \(signal)")
}
Signals.raise(signal: mySignal)
上面代码段的输出是
Received signal 20
我们很乐意谈论服务器端 Swift 和 Kitura。加入我们的 Slack 来与团队见面!
此库根据 Apache 2.0 获得许可。完整的许可证文本可在 LICENSE 中找到。