【Linux】信号|进程终止|调用可执行步调|创建进程 学习笔记 ...

饭宝  金牌会员 | 2025-1-26 02:45:08 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 890|帖子 890|积分 2670

日期:2025.1.26(凌晨)

学习内容:


  • Linux的信号
  • 进程终止
  • 调用可执行步调
  • 创建进程
Linux的信号

首先要知道,我们是可以向进程发送信号的。
要么是直接键盘上发出命令(ctrl + c),或者是利用kill命令。
  1. kill命令
  2. 主要是两个命令:kill和killall命令。
  3. kill命令是要加上pid,而killall命令是要加上进程的名字。
  4. 选项默认的是发出一个SIGTERM(15)命令,用于终止。
  5. -9是强制终止。
复制代码
而在信号的处置惩罚上,我们可以修改原本信号的处置惩罚器,使得处置惩罚信号自界说。
  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include <unistd.h>
  4. // 定义一个信号处理器函数
  5. void handle_signal(int sig) {
  6.     printf("Received signal %d\n", sig);
  7.         //signal(sig, SIG_DFL); // SIG_DFL恢复信号的默认处理方式
  8. }
  9. int main() {
  10.     // 设置 SIGINT (通常是 Ctrl+C) 的处理器为 handle_signal
  11.     signal(SIGINT, handle_signal);
  12.     // 等待信号的到来
  13.     while (1) {
  14.         printf("Running...\n");
  15.     }
  16.     return 0;
  17. }
复制代码
上述代码中,修改了\(SIGINT\)的信号处置惩罚,变成了输出一段话。
在这里中,利用了回调函数。就像这个signal函数中,第二个参数是函数指针,像这种参数是函数指针的,一般就称为回调函数。而这个函数指针对应的函数的参数,是主动接收了信号对应的数字(因为信号SIGINT就是一个宏,其实是一个数字)。
这个signal函数是用来修改信号的处置惩罚方式的。可以理解为,当执行到这个函数时,会将SIGINT的处置惩罚变成了调用这个函数。如果将注释的内容去掉的话,那么执行第一次之后,处置惩罚方式会变成了默认处置惩罚方式。
另外还有一些宏界说是:

  • SIG_IGN(忽略该信号)
  • SIGSHLD(杀死子进程)
还有是killall -0,这个选项可以判断出进程是否还存活。
另外关于函数指针:
[code]#include #include using namespace std;int myTest(int a, string b){        cout
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表