Process.swift 883 B

123456789101112131415161718192021222324252627282930313233343536
  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 {
  10. return Int(getpid())
  11. }
  12. public static var tid: UInt64 {
  13. var tid: __uint64_t = 0
  14. pthread_threadid_np(nil, &tid);
  15. return UInt64(tid)
  16. }
  17. private static var signalsWatchers = Array<(Int32) -> Void>()
  18. private static var signalsObserved = false
  19. public static func watchSignals(_ callback: (Int32) -> Void) {
  20. if !signalsObserved {
  21. [SIGTERM, SIGHUP, SIGSTOP, SIGINT].forEach { item in
  22. signal(item) {
  23. signum in Process.signalsWatchers.forEach { $0(signum) }
  24. }
  25. }
  26. signalsObserved = true
  27. }
  28. signalsWatchers.append(callback)
  29. }
  30. }