Linux 系统编程5:信号

本文深入解析Linux信号机制,包括信号的产生、种类及其在进程控制中的应用。详细介绍了kill命令和kill函数的使用,以及信号在进程管理中的关键作用。同时,文章还探讨了信号屏蔽字的设置和信号集的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看linu下有哪些信号:
kill -l 

哪里会用到信号,比如你想结束掉一个进程 :ps -aux 查看进程
kill 结束进程
kill传递一个信号,信号会导致进程终止
windows任务管理器也是一样的道理,发送一个信号,导致进程终止

man 7 signal  linux中查看信号的机制

信号产生种类

终端特殊按键

	Ctrl+c SIGINT
	Ctrl+z SIGTSTP     //T表示终端 TSTP:终端暂停
	Ctrl+\ SIGQUIT

产生的信号发送给当前shell中的前台进程

LINUX任务(jobs)详解
在用管理员执行一个命令后,用Ctrl+Z把命令转移到了后台。导致无法退出root的。

fg 1继续运行任务
bg 1 后台运行

硬件异常

1.除以0 操作 产生 8) SIGFPE 信号 cpu不能除0
2.访问非法内存 段错误

kill函数 或者kill命令

通过kill函数可以向一个进程发送制定的信号
设计到权限保护:如果你是一个普通用户,则不可能向root用户发送信号,
只能向自己创建的进程发送信号

int kill(pid_t pid,int sig)
pid>0 sig发送个ID为PID的进程
pid ==0 sig发送给与发送进程同组的所有进程
pid<0 发送给组ID为 PID的进程,并且发送进程具有向其发送信号的权限
pid== -1 sig发送给发送进程有权限向他们发送信号的系统上的所有进程
sig为0时,用于检测,特定为pid进程是否存在,如不存在 返回-1

#include<signal.h>
#include<stdio.h>

//如何为一个进程设置信号屏蔽字sigprocmask

void printsigset(const sigset_t *set){
    int i;
    for(i=1;i<32;++i){
        if(sigismember(set,i)==1)//i信号是否在未决信号集中是否置位
            putchar('1');        //置位打印1 否则打印0
        else
            putchar('0');
    }
    puts("");
}
int main(){
    sigset_t s,p;//printf("%d",sizeof(s));//32位下128 个字节
    sigemptyset(&s);//信号集阻塞清空
    sigaddset(&s,SIGINT);//信号集中添加某一个信号
    sigprocmask(SIG_BLOCK,&s,NULL);//BLOCK传递信号集和原有的信号集做一个或操作NULL,原来的信号集不关心NULL
    while(1){
        sigpending(&p);//获取当前进程的未决信号集
        printsigset(&p);//打印未决信号集的函数
        sleep(1);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值