枢覆引 发表于 2025-6-4 20:03:29

【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

路逸思 发表于 2025-10-24 18:34:09

感谢分享,学习下。

寇油 发表于 2025-11-1 13:48:58

新版吗?好像是停更了吧。

訾懵 发表于 2025-12-8 16:15:40

谢谢分享,试用一下

杠氯 发表于 2025-12-17 07:57:53

热心回复!

利怡悦 发表于 2026-1-15 04:05:28

懂技术并乐意极积无私分享的人越来越少。珍惜

夔新梅 发表于 2026-1-15 14:11:30

感谢,下载保存了

旱由 发表于 2026-1-18 10:20:37

这个好,看起来很实用

谯梨夏 发表于 2026-1-21 01:08:19

谢谢分享,试用一下

扎先 发表于 2026-1-22 11:51:58

yyds。多谢分享

聱嘹 发表于 2026-1-23 08:39:02

懂技术并乐意极积无私分享的人越来越少。珍惜

蜴间囝 发表于 2026-1-24 09:07:10

用心讨论,共获提升!

峰埋姚 发表于 2026-1-25 08:37:04

懂技术并乐意极积无私分享的人越来越少。珍惜

任俊慧 发表于 2026-1-26 10:38:18

这个好,看起来很实用

摹熹 发表于 7 天前

感谢分享

嗣伐 发表于 6 天前

这个好,看起来很实用

坪钗 发表于 5 天前

收藏一下   不知道什么时候能用到

恿深疏 发表于 12 小时前

前排留名,哈哈哈
页: [1]
查看完整版本: 【Linux】信号|进程终止|调用可执行程序|创建进程 学习笔记