Hey, thanks for the idea. After some stumbling through documentation and other posts, I got it working. The two biggest problems were finding a way to define SIG_IGN to prevent default handling of the signal, and I didn’t know that I had to use a global queue with a custom run loop or use dispatch_main.
So, for the record... import Foundation let SIG_IGN = CFunctionPointer<((Int32) -> Void)>(COpaquePointer(bitPattern: 1)) signal(SIGINT, SIG_IGN) signal(SIGTERM, SIG_IGN) var queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0) var done = dispatch_semaphore_create(0) var SIGINTsrc = dispatch_source_create(DISPATCH_SOURCE_TYPE_SIGNAL, UInt(SIGINT), 0, queue) dispatch_source_set_event_handler(SIGINTsrc) { println("Trapped SIGINT!") dispatch_semaphore_signal(done) } dispatch_resume(SIGINTsrc) var SIGTERMsrc = dispatch_source_create(DISPATCH_SOURCE_TYPE_SIGNAL, UInt(SIGTERM), 0, queue) dispatch_source_set_event_handler(SIGTERMsrc){ println("Trapped SIGTERM!") dispatch_semaphore_signal(done) } dispatch_resume(SIGTERMsrc) do { var wait = dispatch_time(DISPATCH_TIME_NOW, 1000000000) if (dispatch_semaphore_wait(done, wait) == 0) { break } } while(true) > On May 24, 2015, at 09:58, Randy Widell <randy.wid...@gmail.com> wrote: > > Ah, interesting. I'll give that a shot, thanks. > >> On May 24, 2015, at 08:58, Stephen J. Butler <stephen.but...@gmail.com> >> wrote: >> >> I think you should use GCD by creating a dispatch source of type >> DISPATCH_SOURCE_TYPE_SIGNAL (the handle is the signal enum, eg >> SIGTERM), add an event handler, and then resume it. >> >>> On Sun, May 24, 2015 at 10:40 AM, Randy Widell <randy.wid...@gmail.com> >>> wrote: >>> I’m messing around with Swift to create a network server daemon. Maybe I >>> am thinking too much like a C / C++ programmer, but I am trying to figure >>> out how to gracefully exit when launchd unloads the daemon. Normally, you >>> would just trap SIGTERM, but I’m just not finding anything online about how >>> to do something similar in Swift. >>> _______________________________________________ >>> >>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) >>> >>> Please do not post admin requests or moderator comments to the list. >>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com >>> >>> Help/Unsubscribe/Update your Subscription: >>> https://lists.apple.com/mailman/options/cocoa-dev/stephen.butler%40gmail.com >>> >>> This email sent to stephen.but...@gmail.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com