强行退出 Mac 上应用程序的 6 种方法

Force Quit Mac Apps

当 Mac OS X 的应用开始“无敌风火轮(转菊花)”时可真让人无奈啊,它就这么卡死了。这时要么等应用恢复响应,或者干脆强制退出它,这里介绍 6 种强制退出应用的快捷键操作,有时候能省不少时间。

1、通过键盘强制退出当前能够响应的 Mac 应用
按住 Command + Option + Shift + Esc 键一两秒,直到应用被强制退出。这是退出有前台界面的应用的最快方法了。

2、调出“强制退出应用”窗口
按下 Command + Option + Esc 键,在弹出的“强制退出应用”窗口中点选要退出的应用名称,并点按“强制退出”按钮,该应用就会立刻退出。这可以当做一个简化版的活动监视器来使用,这套快捷键也比较好记。

3、从 Dock 强制退出应用
按住 Option 并右键点按 Dock 上的应用图标,在菜单中会出现“强制退出”选项,点选此项便可以将应用退出,不会弹出任何提示。

4、从苹果菜单中强制退出应用
按住 Shift 键并点按应用的菜单(左上角)调出“强制退出 [应用名称]”。这种方法也十分容易记住,不过并不是最好用的方法,因为有时候应用失去响应时,它的菜单也会无法使用。

5、使用活动监视器来退出应用
按 Command + 空格键来调出 Spotlight,输入 Activity Monitor 便可启动活动监视器。点选你要退出的进程名称或进程 ID,然后点退出(kill),失去响应的应用通常会显示成红色,然后点按红色的“退出进程”按钮。这基本上等于 Windows 系统中的“任务管理器”,或者可以看成之前的“强制退出应用”窗口的完整版。如果前边的方式都无效,这种方法大部分情况下是能够凑效的。

Activity Monitor

6、使用终端 kill 命令
如果所有办法都没法退出某个应用,还有一种选择:使用终端命令。尤其是退出某些底层进程时。启动终端(应用程序 – 实用工具 – 终端.app),并输入下边的命令:

killall [processname]

例如,“killall Safari”就会将 Safari 进程的所有实例都“杀死”。如果你知道进程 ID(可以通过 ps 或 ps aux 命令查询),则可以通过进程 ID 来进行强制退出:

kill -9 [pid]

终端里的 kill 命令几乎在所有场合都会有效,并且伴有一些副作用,例如不会按照 Versions、窗口恢复、自动保存等的方法进行退出,这样可能有时会导致数据丢失。

“附赠”一条:在 iOS 上强制退出应用
除了长按 Home 键调出简易的后台管理之外,还有一个方法:按住电源钮,在出现滑动并关机的画面时,按住 Home 键直到当前的应用被强制退出。

 

转自:http://www.guomii.com/posts/21622

转载于:https://www.cnblogs.com/kazaff/archive/2012/03/03/2378594.html

`modbus_tcp_accept()`函数是Modbus库的一部分,用于接收基于TCP/IP协议的Modbus连接请求。如果需要从程序中强制退出此函数的执行过程,实际上并不直接涉及到`modbus_tcp_accept()`自身的一个退出机制,因为这个函数是在等待一个新的客户端连接的到来。 然而,如果你想要在特定条件下中断该等待流程(例如在接收到信号、异常或者其他事件时),你可以通过以下步骤: 1. **设置线程监控**: 使用多线程编程模型,在`modbus_tcp_accept()`运行的线程外部设置一个监控进程或回调函数。一旦满足某条件(如接收到特定信号、定时器到期等),就调用这个进程或回调函数。 2. **利用系统信号**: 可以捕获并处理系统的中断信号(例如SIGINT 或 SIGTERM)。当接收到此类信号时,可以立即终止`modbus_tcp_accept()`函数的执行,并清理相关的资源。 3. **超时控制**: 在调用`modbus_tcp_accept()`之前,预先设定一个超时时间。可以通过循环调用其他函数(如`select()`, `poll()` 或 `epoll()`)来定期检查是否有新的连接请求到来,同时确保不会无限期地阻塞。 4. **动态资源管理**: 如果你正在使用资源池或其他类型的动态分配策略,可以设计一机制使得在满足某些条件(比如系统负载过高、可用资源耗尽等)时主动释放资源,并结束`modbus_tcp_accept()`的等待状态。 5. **使用条件变量和互斥锁**: 将`modbus_tcp_accept()`的执行置于条件变量的保护之下。通过条件变量的信号传递机制,可以在满足特定条件时唤醒等待中的线程或停止其运行。 下面是一个简化的示例,展示了如何在多线程环境中使用信号来中断`modbus_tcp_accept()`等待操作: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> // Assume we have a Modbus server setup here int main() { // Initialize your socket and other resources for the Modbus server int sock = create_server_socket(); // Function to create server socket struct sockaddr_in addr; socklen_t len = sizeof(addr); while (1) { int client_sock = accept(sock, (struct sockaddr*)&addr, &len); if (client_sock == -1) { // Handle error or exception here perror("Error accepting connection"); continue; } // Process new client connection // Optionally add signal handling here to gracefully exit when needed signal(SIGINT, handle_signal); // Example: Register SIGINT handler // If you want to force a termination under certain conditions, // consider using a thread with a global variable indicating the need to quit. // Close the client socket after processing close(client_sock); } return 0; } void handle_signal(int sig) { switch(sig) { case SIGINT: printf("\nExiting program on request...\n"); // Implement cleanup steps before exiting exit(0); } } ``` 请注意,上述代码仅为示例性质,实际应用中可能需要根据具体的环境和需求调整错误处理、资源管理和信号处理的部分。对于`modbus_tcp_accept()`的具体使用细节以及相关的错误处理,应该参考Modbus库的文档或官方指南。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值