栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux中信号的使用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux中信号的使用

1、信号的基本概念

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

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

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

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

#include
#include
#include
#include
void 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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/729670.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号