欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Linux中信号的使用

时间:2023-07-20
1、信号的基本概念

信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。

2、修改信号的相应方式——signal()

利用signal()可以将指定的信号进行修改
忽略信号:SIG_IGN
默认处理:SIG_DFL
自定义的:自己写的信号处理函数

示例1:
例如下面这段程序表明将SIGINT(键盘按下ctrl+c时,产生该信号)信号修改为自定义的fun处理函数

#include#include#include#includevoid fun(int sign){ printf("fun was called, sign = %dn", sign);}int main(){ signal(SIGINT, fun); while(1) { sleep(1); printf("main runningn"); } exit(0);}

程序运行如下:

3、发送信号—— kill()

kill() 可以向指定的进程发送指定的信号‘
int kill(pid_t pid,int sig);

pid > 0 指定将信号发送个那个进程

pid == 0 信号被发送到和当前进程在同一个进程组的进程

pid == -1 将信号发送给系统上有权限发送的所有的进程

pid < -1 将信号发送给进程组 id 等于 pid 绝对值,并且有权限发送的所有的进程。

sig 指定发送信号的类型。

示例2:
下面的代码表示:运行此程序并输入一个进程的pid,将该进程使用sig信号进行处理

#include #include #include #include int main(int argc, char* argv[])//pid, sig{ if ( argc != 3 ) { printf("argc errorn"); exit(0); } int pid = 0; int sig = 0; sscanf(argv[1],"%d",&pid); sscanf(argv[2],"%d",&sig); if ( kill(pid,sig) == -1 ) { perror("kill error"); } exit(0);}

程序运行如下:
查询示例1的进程id,然后运行实例2,使用SIGKILL(#define SIGKILL 9)信号杀死进程14851(示例1)

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。