// // GTMSignalHandler.h // // Copyright 2008 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. // #import #import "GTMDefines.h" // GTMSignalHandler. // // This is a very simple, easy-to-use class for registering handlers that get // called when a specific signal is delivered. Also handy for ignoring // inconvenient signals. Ignoring SIGKILL is not supported for what should be // obvious reasons. You can pass nil for target & action to ignore the signal. // // Example of how to catch SIGABRT and SIGTERM while ignring SIGWINCH: // GTMSignalHandler *abrt, *term, *winch; // abrt = [[GTMSignalHandler alloc] // initWithSignal:SIGABRT // target:self // action:@selector(handleAbort:)]; // // term = [[GTMSignalHandler alloc] // initWithSignal:SIGTERM // target:self // action:@selector(handleTerm:)]; // // winch = [[GTMSignalHandler alloc] initWithSignal:SIGWINCH // initWithSignal:SIGWINCH // target:nil // action:NULL // // -(void)handleTerm:(int)signo { // .. do stuff .. // } // // Release the handler when you're no longer interested in handling that signal. // Note that signal(SIG_IGN, signo) is performed on each signal handled by // objects of this class, and those do not get un-done. // // Multiple handlers for the same signal is NOT supported. // // libdispatch is used to handle the signals. NB that sending a signal // from dispatch_get_main_queue will not get caught in a CFRunLoop based run // loop. // https://openradar.appspot.com/radar?id=5030997057863680 NS_DEPRECATED(10_0, 10_6, 1_0, 4_0, "Use a DISPATCH_SOURCE_TYPE_SIGNAL dispatch source.") @interface GTMSignalHandler : NSObject { @private dispatch_source_t signalSource_; } // Returns a retained signal handler object that will invoke |handler| on the // |target| whenever a signal of number |signo| is delivered to the process. -(id)initWithSignal:(int)signo target:(id)target action:(SEL)action; // Invalidates the handler so that it isn't listening anymore. - (void)invalidate; @end