信号
通用跨平台信号处理器。
先决条件
Swift
- Swift Open Source
swift-4.0.0-RELEASE
工具链(对于最新版本最低要求) - Swift Open Source
swift-4.2-RELEASE
工具链(推荐) - 包含在 Xcode 版本 10.0 (10A255) 或更高版本的 Xcode 中的 Swift 工具链。
macOS
- macOS 10.11.6(El Capitan)或更高版本。
- 使用上述工具链之一的 Xcode 版本 9.0 或更高版本。
- 使用包含的工具链的 Xcode 版本 10.0(10A255)或更高版本(推荐)。
iOS
- iOS 10.0 或更高版本
- 使用上述工具链之一的 Xcode 版本 9.0 或更高版本。
- 使用包含的工具链的 Xcode 版本 10.0(10A255)或更高版本(推荐)。
Linux
- Ubuntu 16.04(或16.10,但仅在16.04上进行了测试)。
- 上述Swift开源工具链之一。
构建
要从命令行构建Signals
% cd <path-to-clone>
% swift build
使用信号
包含在项目中
Swift包管理器
要将BlueSignals包含到Swift包管理器包中,将其添加到定义在您的Package.swift
文件中的dependencies
属性中。您可以使用majorVersion
和minor
参数选择版本。例如
dependencies: [
.Package(url: "https://github.com/IBM-Swift/BlueSignals.git", majorVersion: <majorVersion>, minor: <minor>)
]
Carthage
要使用Carthage在项目中包含BlueSignals,请向您的Cartfile
中添加一行,包含GitHub组织、项目和版本名称。例如
github "IBM-Swift/BlueSignals" ~> <majorVersion>.<minor>
CocoaPods
要在使用 CocoaPods 的项目中包含 BlueSignals,只需将 BlueSignals
添加到您的 Podfile
中,例如:
platform :ios, '10.0'
target 'MyApp' do
use_frameworks!
pod 'BlueSignals'
end
开始之前
首先需要做的是导入 Signals 框架。这可以通过以下方式完成:
import Signals
提供的 API
Signals 提供了四个(4)类级别 API。其中三个(3)用于捕获和处理操作系统信号。另一个功能允许引发一个信号。
捕获信号
trap(signal signal: Signal, action: SigActionHandler)
- 这个基本 API 允许你为特定信号设置特定的处理程序。
下面的例子展示了如何向服务器添加捕获处理程序,以便在用户按下 ^C
时执行有序关闭,这会将一个 SIGINT
发送给进程。
import Signals
...
let server: SomeServer = ...
Signals.trap(signal: .int) { signal in
server.shutdownServer()
}
server.run()
此外,还有基于上述基本 API 构建的便捷 API,可以捕获多个信号,每个信号都有自己的处理程序或单个处理程序。
trap(signals signals: [(signal: Signal, action: SigActionHandler)])
- 这个允许你在单个函数调用中捕获多个信号到单独的处理程序。trap(signals signals: [Signal], action: SigActionHandler)
- 这个 API 允许你捕获多个信号到公共处理程序。
引发信号
raise(signal signal: Signal)
- 此API用于向应用程序发送操作系统信号。
以下示例展示了如何使用信号机制向操作系统发送信号,此处为SIGABRT
。
import Signals
...
Signals.raise(signal: .abrt)
忽略信号
func ignore(signal: Signal)
- 此API用于忽略操作系统信号。
以下示例展示了如何使用信号机制忽略操作系统信号,此处为SIGPIPE
。
import Signals
...
Signals.ignore(signal: .pipe)
恢复信号默认处理程序
func restore(signal: Signal)
- 此API用于恢复操作系统信号的默认处理程序。
以下示例展示了如何使用信号机制恢复信号的默认处理程序,此处为SIGPIPE
。
import Signals
...
Signals.restore(signal: .pipe)
添加用户定义的信号
以下示例演示了如何添加用户定义的信号,为其添加一个陷阱处理程序,然后发送该信号。
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中找到。