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 <[email protected]> wrote:
>
> Ah, interesting. I'll give that a shot, thanks.
>
>> On May 24, 2015, at 08:58, Stephen J. Butler <[email protected]>
>> 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 <[email protected]>
>>> 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 ([email protected])
>>>
>>> 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 [email protected]
_______________________________________________
Cocoa-dev mailing list ([email protected])
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 [email protected]