Skip to content

Commit

Permalink
add support for trapping sigabrt, sigill, sigsegv (#184)
Browse files Browse the repository at this point in the history
- sigabrt: usually generated by the abort() function. Useful for cleanup prior to termination.
- sigill: issued if the user attempts to execute an illegal, malformed, or privileged instruction.
- sigsegv: issued if the user makes an invalid memory reference, such as dereferencing a null or invalid pointer.
  • Loading branch information
zg authored Jun 3, 2024
1 parent 05d3852 commit d58e6bf
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions Sources/UnixSignals/UnixSignal.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,11 @@ import Dispatch
/// Signals are standardized messages sent to a running program to trigger specific behavior, such as quitting or error handling
public struct UnixSignal: Hashable, Sendable, CustomStringConvertible {
internal enum Wrapped {
case sigabrt
case sighup
case sigill
case sigint
case sigsegv
case sigterm
case sigusr1
case sigusr2
Expand All @@ -49,12 +52,18 @@ public struct UnixSignal: Hashable, Sendable, CustomStringConvertible {
return String(describing: self.wrapped)
}

/// Usually generated by the abort() function. Useful for cleanup prior to termination.
public static let sigabrt = Self(.sigabrt)
/// Hang up detected on controlling terminal or death of controlling process.
public static let sighup = Self(.sighup)
/// Issued if the user attempts to execute an illegal, malformed, or privileged instruction.
public static let sigill = Self(.sigill)
/// Issued if the user sends an interrupt signal.
public static let sigint = Self(.sigint)
/// Issued if the user sends a quit signal.
public static let sigquit = Self(.sigquit)
/// Issued if the user makes an invalid memory reference, such as dereferencing a null or invalid pointer.
public static let sigsegv = Self(.sigsegv)
/// Software termination signal.
public static let sigterm = Self(.sigterm)
public static let sigusr1 = Self(.sigusr1)
Expand All @@ -70,12 +79,18 @@ extension UnixSignal.Wrapped: Sendable {}
extension UnixSignal.Wrapped: CustomStringConvertible {
var description: String {
switch self {
case .sigabrt:
return "SIGABRT"
case .sighup:
return "SIGHUP"
case .sigill:
return "SIGILL"
case .sigint:
return "SIGINT"
case .sigquit:
return "SIGQUIT"
case .sigsegv:
return "SIGSEGV"
case .sigterm:
return "SIGTERM"
case .sigusr1:
Expand All @@ -93,12 +108,18 @@ extension UnixSignal.Wrapped: CustomStringConvertible {
extension UnixSignal.Wrapped {
var rawValue: Int32 {
switch self {
case .sigabrt:
return SIGABRT
case .sighup:
return SIGHUP
case .sigill:
return SIGILL
case .sigint:
return SIGINT
case .sigquit:
return SIGQUIT
case .sigsegv:
return SIGSEGV
case .sigterm:
return SIGTERM
case .sigusr1:
Expand Down

0 comments on commit d58e6bf

Please sign in to comment.