通用的跨平台信号处理程序。
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 中找到。