标准C库之raise,abort函数(进程通信函数,发送信号类函数)

这篇具有很好参考价值的文章主要介绍了标准C库之raise,abort函数(进程通信函数,发送信号类函数)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

如果,想要深入的学习标准C库中的raise,abort函数,还是需要去自己阅读Linux系统中的帮助文档。

具体输入命令:

man 3 raise/abort

即可查阅到完整的资料信息。

raise函数

raise 是一个C语言标准库函数,它的作用是给当前进程发送信号。它属于信号处理库(signal.h),允许程序员通过代码控制信号的发送和处理。

raise 函数原型如下:

#include <signal.h> //使用这个函数需导入此头文件
int raise(int sig);

参数:

  • int sig:要发送的信号。Linux 支持多种信号,sig 参数可以是整数信号代码,也可以是预定义的信号常量。以下是一些常用的信号及其说明:

    • SIGHUP(1):挂起信号,通常用于通知进程重新读取其配置文件。
    • SIGINT(2):中断信号,通常用于用户通过键盘(如按下 Ctrl+C)发送的中断。
    • SIGQUIT(3):退出信号,通常用于用户通过键盘(如按下 Ctrl+\)发送的退出。
    • SIGILL(4):非法指令信号,通常在进程尝试执行非法或未定义的指令时发送。
    • SIGABRT(6):异常中止信号,通常在进程遇到严重错误时发送。
    • SIGFPE(8):浮点异常信号,通常在进程遇到浮点错误时发送。
    • SIGKILL(9):杀死信号,强制结束进程,进程无法捕获或忽略此信号。
    • SIGSEGV(11):段错误信号,通常在进程试图访问非法内存区域时发送。
    • SIGPIPE(13):管道破裂信号,通常在进程向已关闭的管道写入数据时发送。
    • SIGALRM(14):报警信号,通常用于进程超时或定时器到期。
    • SIGTERM(15):终止信号,通知进程优雅地结束,进程可以捕获并执行清理操作。

返回值:

  • 如果函数成功发送信号,返回0。
  • 如果出现错误,返回非0值。

raise 函数可以用于在程序中触发某些事件,如终止进程、中断进程等。例如,当程序在运行过程中遇到不可恢复的错误时,可以使用 raise 函数生成 SIGABRT 信号来终止进程。

一个简单的 raise 示例:

#include <signal.h>
#include <stdio.h> //需导入此头文件
// char *fgets(char *str, int n, FILE *stream);
int main(){

    printf("请输入一个正整数,单数直接杀死进程,双数正常退出\n");
    int num;

    scanf("%d",&num); // 从标准输入读取数据

    if(num % 2 == 1){
        raise(SIGKILL);
    }
    printf("正常退出\n");

    return 0;
}

abort函数

abort是一个标准C库函数,定义在stdlib.h头文件中。该函数主要用于异常情况下中止程序的执行。当程序遇到无法处理的错误或异常情况时,可以调用abort函数立即终止程序,并向操作系统返回一个非零状态码。在终止之前,abort会触发一个SIGABRT信号,这个信号可以被程序捕获以执行特定的操作,例如释放资源或记录错误日志。

函数原型如下:

void abort(void);

请注意,abort函数没有参数,也没有返回值
这是因为调用abort函数的目的是立即终止程序执行,而不是返回错误信息给调用者。

以下是abort函数的一个简单示例:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int userInput;

    printf("Enter a positive number: ");
    scanf("%d", &userInput);

    if (userInput < 0) {
        printf("Error: negative number entered!\n");
        abort();
    }

    printf("The entered number is: %d\n", userInput);

    return 0;
}

在这个示例中,我们要求用户输入一个正数。如果用户输入了一个负数,程序会打印错误信息并调用abort函数立即终止程序。文章来源地址https://www.toymoban.com/news/detail-425335.html

到了这里,关于标准C库之raise,abort函数(进程通信函数,发送信号类函数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 标准C库之strcpy,strncpy函数(拷贝C风格字符串、拷贝字符串,可指定拷贝长度)

    如果,想要深入的学习标准C库中strcpy,strncpy函数,还是需要去自己阅读Linux系统中的帮助文档。 具体输入命令: 即可查阅到完整的资料信息。 strcpy 函数是 C 语言标准库中的一个函数,它用于将一个字符串(C 语言中以字符数组表示的字符串)复制到另一个字符串。 strcpy 函

    2023年04月26日
    浏览(42)
  • 【探索Linux】—— 强大的命令行工具 P.16(进程信号 —— 信号产生 | 信号发送 | 核心转储)

    在现代社会中,信号无处不在。我们的生活充满了各种各样的信号,它们指引着我们前进的方向,使我们能够了解周围环境的变化。正如在计算机编程中一样,Linux进程信号也是一种重要的信号,它们扮演着相似的角色。 想象一下,在繁忙的城市街道上行驶,交通信号灯是我

    2024年02月05日
    浏览(52)
  • 【信号】信号处理与进程通信:快速上手

    目录 0. 信号概述 1. 产生信号的方式: 1.1 当用户按某些终端键时,将产生信号。 1.2 硬件异常将产生信号。 1.3 软件异常将产生信号。 1.4 调用kill函数将发送信号。 1.5 运行kill命令将发送信号。 2. 信号的默认(缺省)处理方式 2.1 终止进程: 2.2 缺省出来: 2.3 停止进程: 2.

    2024年02月12日
    浏览(40)
  • 【Linux之进程间通信】04.Linux进程间的信号通信

      【Linux之进程间通信】 项目代码获取: https://gitee.com/chenshao777/linux-processes.git (麻烦点个免费的Star哦,您的Star就是我的写作动力!) 04.Linux进程间的信号通信 【目录】   一、进程间信号发送方式   二、进程间信号接收方式   三、进程间信号处理方式 一、进程间信号发

    2024年02月06日
    浏览(39)
  • 【Linux】进程通信 — 信号(下篇)

    上一篇我们讲述了信号的基本概念和相应系统接口的使用,本章我们想更深入的学习信号发送的一系列过程,目标已经确定,接下来就要搬好小板凳,准备开讲了…🙆🙆🙆🙆 实际执行信号的处理动作称为信号递达(Delivery)。 信号从产生到递达之间的状态,称为信号未决(P

    2024年02月09日
    浏览(35)
  • 进程间通信之信号

    什么是信号? 信号是给程序提供一种可以处理 异步 事件的方法,它利用 软件中断 来实现。不能自定义信号,所有信号都是系统预定义的。 由shell终端根据当前发生的错误(段错误、非法指令等)Ctrl+c而产生相应的信号 比如:socket通信或者管道通信,如果读端都已经关闭,执

    2024年02月06日
    浏览(31)
  • shell 向某一个进程 模拟发送 ctrl c信号

    kill -SIGINT $pid # 相当于 ctrl-c 在 shell 中模拟 ctrl+.. 操作_shell脚本怎么写ctrlc_sunzq55的博客-CSDN博客

    2024年02月10日
    浏览(33)
  • 【Linux】进程间通信之信号机制

    信号是一个程序中断,且是一个软中断,收到一个信号后,具体怎么处理该信号,什么时候处理是由进程决定的,所以是软中断。 信号的种类:使用 kill -l 命令可以查看有多少个信号 1~31是非可靠信号 34~64是可靠信号 非可靠信号:当前信号有可能丢失,丢失就无法执行该信号

    2024年02月12日
    浏览(35)
  • 【Linux】进程间通信 -- 信号量

    信号量是什么? 本质是一个计数器,通常用来表示公共资源中,资源数量多少的问题 公共资源:能被多个进程同时可以访问的资源 访问没有保护的公共资源:数据不一致问题(比如我想写abc123,但是我123还没有写入,就读取了abc,可能数据分开会导致数据无意义) 为什么要

    2024年02月16日
    浏览(47)
  • linux进程间通信(信号量)

    信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即 P(信号变量))和发 送(即 V(信号变量))信息操作。最简单的信号量是只能取 0 和 1 的变量,这也是信号量最常见的一种形式, 叫做二进制信号量。而可以取多个正整数的信号量被称为通用信号

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包