/
ForceQuitUnresponsiveAppsAppDelegate.m
33 lines (24 loc) · 1.17 KB
/
ForceQuitUnresponsiveAppsAppDelegate.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Copyright (c) 2012 Jonathan 'Wolf' Rentzsch: http://rentzsch.com
// Some rights reserved: http://opensource.org/licenses/MIT
#import "ForceQuitUnresponsiveAppsAppDelegate.h"
#import "CGSNotifications.h"
void MyNotifyProc(CGSNotificationType type, void *data, unsigned int dataLength, void *userData) {
assert(kCGSNotificationAppUnresponsive == type);
assert(data);
assert(dataLength >= sizeof(CGSProcessNotificationData));
CGSProcessNotificationData *noteData = (CGSProcessNotificationData*)data;
NSRunningApplication *unresponsiveProcess = [NSRunningApplication runningApplicationWithProcessIdentifier:noteData->pid];
NSLog(@"Force-Quitting Unresponsive Application: %@", unresponsiveProcess.localizedName);
[unresponsiveProcess forceTerminate];
}
@implementation ForceQuitUnresponsiveAppsAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification*)notification_ {
CGError err = CGSRegisterNotifyProc(MyNotifyProc,
kCGSNotificationAppUnresponsive,
NULL);
if (err) {
CGSGlobalError(err, "");
[NSApp terminate:nil];
}
}
@end