即时登出目标C

时间:2015-08-07 13:28:50

标签: objective-c macos logout

我希望能够作为安全协议注销,但是存在一个主要问题,即如果用户反复点击键盘或鼠标,则会阻止注销。

这是我的退出代码:

NSTask  *pmsetTask = [[NSTask alloc] init];
pmsetTask.launchPath = @"/usr/bin/pmset";
pmsetTask.arguments = @[@"sleepnow"];
[pmsetTask launch];

2 个答案:

答案 0 :(得分:0)

我认为你的意思只是窗口会话?或者你也想要ssh会话?

你有各种选择。如果您是root用户,则可以使用killall loginwindow。这将迫使所有人注销图形会话。同样,您可以killall -m sshd:删除所有SSH会话。

作为普通用户,我可能会使用killall -m .。这将杀死我被允许杀死的所有进程。当然,如果你以root身份运行它,我不知道它是否能够干净地恢复;我不推荐它。

-m killall的所有{{1}}次来电都要小心,因为它们可以杀死超过你的意思(基于正则表达式)。但是,达到你所谈论的内容的最佳方式,特别是非常快速,并且没有为用户提供阻止它的机会,就会杀死管理会话的过程。

答案 1 :(得分:-3)

如果你只是做一个简单的动作并且点击它就不会被阻止:

[[(YOURAppDelegate *)[UIApplication sharedApplication].delegate navigationControllerOfRootViewController] popToRootViewControllerAnimated:true];

这假设您使用的是编程视图,并且已将navigationControllerOfRootViewController声明为navigationController,并在AppDelegate头文件中声明了此属性。

当你调用这个方法时,你的navigationControllerOfRootViewController会杀掉堆栈顶部的所有东西,并且你有一个总是被设置为navigationControllerOfRootViewController的rootViewController的Splash Screen,这样,当你弹出它时在堆栈的底部,它只显示你的启动画面,没有任何人可以做任何事情来阻止它。更好的是,将动画设置为" FALSE"这个流行音乐将会发生。