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

Reply via email to