饭宝 发表于 2025-1-26 02:45:08

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

日期:2025.1.26(凌晨)

学习内容:


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

首先要知道,我们是可以向进程发送信号的。
要么是直接键盘上发出命令(ctrl + c),或者是利用kill命令。
kill命令
主要是两个命令:kill和killall命令。
kill命令是要加上pid,而killall命令是要加上进程的名字。
选项默认的是发出一个SIGTERM(15)命令,用于终止。
-9是强制终止。而在信号的处置惩罚上,我们可以修改原本信号的处置惩罚器,使得处置惩罚信号自界说。
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

// 定义一个信号处理器函数
void handle_signal(int sig) {
    printf("Received signal %d\n", sig);
        //signal(sig, SIG_DFL); // SIG_DFL恢复信号的默认处理方式
}

int main() {
    // 设置 SIGINT (通常是 Ctrl+C) 的处理器为 handle_signal
    signal(SIGINT, handle_signal);

    // 等待信号的到来
    while (1) {
      printf("Running...\n");
    }

    return 0;
}上述代码中,修改了\(SIGINT\)的信号处置惩罚,变成了输出一段话。
在这里中,利用了回调函数。就像这个signal函数中,第二个参数是函数指针,像这种参数是函数指针的,一般就称为回调函数。而这个函数指针对应的函数的参数,是主动接收了信号对应的数字(因为信号SIGINT就是一个宏,其实是一个数字)。
这个signal函数是用来修改信号的处置惩罚方式的。可以理解为,当执行到这个函数时,会将SIGINT的处置惩罚变成了调用这个函数。如果将注释的内容去掉的话,那么执行第一次之后,处置惩罚方式会变成了默认处置惩罚方式。
另外还有一些宏界说是:

[*]SIG_IGN(忽略该信号)
[*]SIGSHLD(杀死子进程)
还有是killall -0,这个选项可以判断出进程是否还存活。
另外关于函数指针:
#include #include using namespace std;int myTest(int a, string b){        cout
页: [1]
查看完整版本: 【Linux】信号|进程终止|调用可执行步调|创建进程 学习笔记