赞
踩
在Linux操作系统中,信号是一种进程间通信的方式,用于通知进程发生了某种事件。Linux中的普通信号(standard signals)有31个,每个信号都有特定的用途。以下是这31个普通信号的列表及其描述:
Ctrl+C
键发送。Ctrl+\
键发送并生成核心转储。abort()
函数调用发送。alarm()
函数设置的定时器到期时发送。Ctrl+Z
键发送。这些信号在编程和系统管理中有着重要的应用。通过使用信号,进程可以处理各种异常和特殊情况,实现更健壮和灵活的程序设计。
SIGINT信号通常由用户按下Ctrl+C
键发送。以下代码展示了如何捕获和处理SIGINT信号:
- #include <stdio.h>
- #include <signal.h>
- #include <unistd.h>
-
- // 信号处理函数
- void handle_sigint(int sig) {
- printf("Caught signal %d (SIGINT)\n", sig);
- }
-
- int main() {
- // 注册信号处理函数
- signal(SIGINT, handle_sigint);
-
- // 无限循环,等待信号
- while (1) {
- printf("Running...\n");
- sleep(1);
- }
-
- return 0;
- }
编译并运行该程序后,当你按下Ctrl+C
时,它将捕获SIGINT信号并调用handle_sigint
函数。
SIGTERM信号通常用于请求进程终止。以下代码展示了如何捕获和处理SIGTERM信号:
- #include <stdio.h>
- #include <signal.h>
- #include <unistd.h>
-
- // 信号处理函数
- void handle_sigterm(int sig) {
- printf("Caught signal %d (SIGTERM)\n", sig);
- // 进行清理工作
- printf("Cleaning up...\n");
- // 终止程序
- _exit(0);
- }
-
- int main() {
- // 注册信号处理函数
- signal(SIGTERM, handle_sigterm);
-
- // 无限循环,等待信号
- while (1) {
- printf("Running...\n");
- sleep(1);
- }
-
- return 0;
- }
编译并运行该程序后,可以通过以下命令发送SIGTERM信号:
kill -SIGTERM <pid>
其中,<pid>
是程序的进程ID。
SIGCHLD信号在子进程终止或停止时发送给父进程。以下代码展示了如何捕获和处理SIGCHLD信号:
- #include <stdio.h>
- #include <signal.h>
- #include <unistd.h>
- #include <sys/wait.h>
-
- // 信号处理函数
- void handle_sigchld(int sig) {
- // 等待子进程终止
- wait(NULL);
- printf("Caught signal %d (SIGCHLD). Child process terminated.\n", sig);
- }
-
- int main() {
- // 注册信号处理函数
- signal(SIGCHLD, handle_sigchld);
-
- // 创建子进程
- pid_t pid = fork();
- if (pid == 0) {
- // 子进程代码
- printf("Child process running...\n");
- sleep(2);
- printf("Child process exiting...\n");
- _exit(0);
- } else {
- // 父进程代码
- printf("Parent process waiting for child to terminate...\n");
- // 无限循环,等待信号
- while (1) {
- sleep(1);
- }
- }
-
- return 0;
- }
编译并运行该程序后,子进程将在2秒后终止,父进程将捕获SIGCHLD信号并调用handle_sigchld
函数。
SIGKILL和SIGSTOP
SIGKILL和SIGSTOP
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。