Linux系统编程——进程通信 信号通信

在内核中有一个对象叫信号,进程A与进程B通信在用户空间发送信号是不可能的。只能通过内核发送信号。
信号对象在内核中已经存在了。
内核空间有多少种信号?
通过Linux命令Kill -l 便可以查看有多少种信号。

前面数字代表信号ID,后面字符串为信号的宏,每个宏代表不同的功能。一共有64种信号。

信号的发送:

kill()----发送信号

#include <signal.h>
#include <sys/types.h>
参数:
pid:
	正数:要接收信号的进程的进程号
	0:信号被发送到所有和pid进程在同一个进程组的进程
	-1:信号发送给所有的进程表中的进程(除了进程号最大的以外)
sig:信号

返回值:
成功:0
失败:-1
int kill(pid_t,int sig)

案例——kill命令实现

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>
int main(int args,char *argv[]){
    int sig;
    int pid;

    if(args < 3){
        printf("please input parsm\n");
        return -1;
    }

    sig = atoi(argv[1]);
    pid = atoi(argv[2]);

    printf("sig = %d, pid = %d\n",sig,pid);

    kill(pid,sig);

    return 0;
}

在运行一个死循环进程

#include <stdio.h>

int main(){
    while(1);
}

使用ps -axj命令查看死循环进程的Id号为4416

运行mykill

没有报错。再次回到运行死循环程序的终端里。

提示已经杀死进程。

raise() – 发送信号

raise函数和kill函数一样可以发送信号,但是raise函数可以发信号给自己
raise(getpid(),sig)

#include <signal.h>
#include <sys/types.h>
int raise(int sig)

参数:sig信号
返回值:
成功:0  失败 :-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CeHi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值