日期: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,这个选项可以判断出进程是否还存活。
另外关于函数指针:
[code]#include #include using namespace std;int myTest(int a, string b){ cout |