【Linux】信号通讯编程

一、信号类型

1、SIGKILL:杀死进程

2、SIGSTOP:暂停进程

3、SIGCHLD:子进程停止或结束时用来通知父进程


二、函数学习

1、发送信号:kill,向进程发送信号

1)函数原型

int kill(pid_t pid, int sig);

2)所属头文件

#include <sys/types.h>

#include <signal.h>

3)返回值

成功: 0

失败: -1

4)参数说明

pid: 当pid > 0, 接收信号的进程号

sig: 要发送的信号


/* send_sig.c */

#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>

void main(int arvc, char* argv[])
{
	pid_t pid = 0;

	pid = atoi(argv[1]);

	kill(pid, SIGINT);

	puts("Signal was sent.");
}



2、处理信号:signal, 设置信号的处理方式

1)函数原型

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

2)所属头文件

#include <signal.h>

3)返回值

成功: 返回处理函数的指针

失败: SIG_ERR

4)参数说明

signum: 要处理的信号

handler: 对应信号的处理方式

* SIG_IGN: 忽略(ignore)

* SIG_DEF: 交给内核处理

* 用户自定义函数: 交给用户自定义函数处理


/* read_sig.c */

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

void myfunc(int num)
{
	puts("Process sd_proc received SIGINT.");
}

void main()
{
	signal(SIGINT, myfunc);

	pause();
}


* 运行结果

* 命令: ps -e 查看进程read_sig的pid, 然后用send_sig发送信号给这个pid.









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值