Re: Swift program termination...
Re: Swift program termination...
- Subject: Re: Swift program termination...
- From: Randy Widell <email@hidden>
- Date: Tue, 26 May 2015 11:29:21 -0700
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@hidden> wrote:
>
> Ah, interesting. I'll give that a shot, thanks.
>
>> On May 24, 2015, at 08:58, Stephen J. Butler <email@hidden> 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@hidden> 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@hidden)
>>>
>>> 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:
>>>
>>> This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden