Process.swift 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. //
  2. // Process
  3. // Swifter
  4. //
  5. // Copyright (c) 2014-2016 Damian Kołakowski. All rights reserved.
  6. //
  7. import Foundation
  8. public class Process {
  9. public static var PID: Int { return Int(getpid()) }
  10. public typealias SignalCallback = Int32 -> Void
  11. private static var signalsWatchers = [SignalCallback]()
  12. private static var signalsObserved = false
  13. public static func watchSignals(callback: SignalCallback) {
  14. if !signalsObserved {
  15. registerSignals()
  16. signalsObserved = true
  17. }
  18. signalsWatchers.append(callback)
  19. }
  20. private static func handleSignal(signal: Int32) {
  21. for callback in Process.signalsWatchers {
  22. callback(signal)
  23. }
  24. }
  25. private static func registerSignals() {
  26. signal(SIGTERM) { signum in Process.handleSignal(signum) }
  27. signal(SIGHUP ) { signum in Process.handleSignal(signum) }
  28. signal(SIGSTOP) { signum in Process.handleSignal(signum) }
  29. signal(SIGTERM) { signum in Process.handleSignal(signum) }
  30. signal(SIGINFO) { signum in Process.handleSignal(signum) }
  31. signal(SIGINT ) { signum in Process.handleSignal(signum) }
  32. }
  33. }