之前我们整理了信号的产生、传递、以及处理流程,明白了他的一个大致流程、但最后如何使用才是我们真正需要去弄懂的,否则一切都白搭。下面是我在使用过程中遇到的问题以及使用过的函数,希望大家可以参考一下。
发送信号
信号产生的方式包括终端键盘输入、硬件或系统错误、系统调用方法和软件条件,具体内容可以看前几章。按照日常使用的习惯,最常见的是终端键盘输入、系统调用方法、和软件条件,他们起到的最终结果都是向一个进程发送一个特定的信号。
终端键盘: 在终端跑一个程序时,我们向终端该程序时,最常用就是使用键盘掐断,如“Ctrl+\”,实际是向在终端执行的进程发送了一个SIGQUIT信号,这样进程就会被强制停止。
系统调用方法: 常用的函数包括kill(),abort(),raise()
1、kill(pid_t pid,int sig)函数:用来将参数sig,即指定的信号发送给指定参数pid进程,
pid>0 将信号传给进程识别码为pid 的进程
pid=0 将信号传给和目前进程相同进程组的所有进程
pid=-1 将信号广播传送给系统内所有的进程
pid<0 将信号传给进程组识别码为pid 绝对值的所有进程
返回值:执行成功则返回0, 如果有错误则返回-1.
错误代码:
EINVAL 参数sig 不合法
ESRCH 参数pid 所指定的进程或进程组不存在
EPERM 权限不够无法传送信号给指定进程
2、abort():通常用来向调用该函数的进程发送SIGABRT信号,即导致进程异常终止。前提是进程未忽略对该信号的处理。
3、raise(int sig):向自身发送信号,他的实现类似于kill(getpid(), int sig);
#include <stdio.h>
#include <signal.h>
void main(int args, char *argv[])
{
int count
Linux进程间通信:深入理解信号(Signal)

本文详细介绍了Linux系统中的信号机制,包括发送信号的方式(如kill、abort、raise函数),信号的屏蔽操作(使用sigprocmask和pthread_sigmask),以及信号处理函数的注册(signal和sigaction函数的使用)。重点阐述了signal和sigaction函数在处理信号时的区别和优劣,并提到了不可捕获和忽略的SIGKILL和SIGSTOP信号。
最低0.47元/天 解锁文章
1337

被折叠的 条评论
为什么被折叠?



