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

Linux信号: kill、raise、abort、alarm函数

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

Linux信号: kill、raise、abort、alarm函数

kill、raise、abort函数


#include 
#include 

int main(){

    char *buf;

    strcpy(buf, "hello");


    return 0;
}
carey@ubuntu:~/Linux/lesson17_sig$ gcc core.c -g
carey@ubuntu:~/Linux/lesson17_sig$ ls
a.out  core.c
carey@ubuntu:~/Linux/lesson17_sig$ gdb a.out 
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from a.out...done.
(gdb) start
Temporary breakpoint 1 at 0x5fe: file core.c, line 8.
Starting program: /home/carey/Linux/lesson17_sig/a.out 

Temporary breakpoint 1, main () at core.c:8
8	    strcpy(buf, "hello");
(gdb) s

//接收到信号
Program received signal SIGSEGV, Segmentation fault.
0x0000555555554602 in main () at core.c:8
8	    strcpy(buf, "hello");
(gdb) 


#include 
#include 
#include 
#include 

int main(){

    int pid = fork();

    if(pid > 0){
        //P
        printf("Pn");
        sleep(2);
        printf("kill C processn");
        kill(pid, 9);


    }else if(pid == 0){
        //C
        for(int i=1; i<=15; i++){
            printf("C %dn",i);
            sleep(1);
        }

    }else{
        perror("fork");
        return -1;
    }


    return 0;
}
carey@ubuntu:~/Linux/lesson17_sig$ gcc kill.c -o k
carey@ubuntu:~/Linux/lesson17_sig$ ./k
P
C 1
C 2
kill C process
carey@ubuntu:~/Linux/lesson17_sig$ ./k
P
C 1
C 2
kill C process
//运气不错,第三次就看到这个了 这是正常的 因为在第二秒的时候子进程抢到了时间片又执行了一擦
carey@ubuntu:~/Linux/lesson17_sig$ ./k
P
C 1
C 2
kill C process
C 3

alarm()

定时器与进程的状态无关(自然定时法),不管进程处于什么状态,alarm都会计时。


#include 
#include 

int main(){

    int sec = alarm(10);

    printf("sec = %dn", sec);

    sleep(2);
    
    for(int i=1; i<6; i++){
        printf("j = %d n", i);
        sleep(1);
    }

    sec = alarm(10);
    printf("sec = %dn", sec);

    for(int i=1; i<100; i++){
        printf("i = %d n", i);
        sleep(1);
    }

    return 0;
}
//第一个闹钟设置5
carey@ubuntu:~/Linux/lesson17_sig$ ./ala 
sec = 0
j = 1 
j = 2 
j = 3 
Alarm clock
carey@ubuntu:~/Linux/lesson17_sig$ gcc alarm.c -o ala

//第一个闹钟设置10
carey@ubuntu:~/Linux/lesson17_sig$ gcc alarm.c -o ala
carey@ubuntu:~/Linux/lesson17_sig$ ./ala 
sec = 0
j = 1 
j = 2 
j = 3 
j = 4 
j = 5 
sec = 3
i = 1 
i = 2 
i = 3 
i = 4 
i = 5 
i = 6 
i = 7 
i = 8 
i = 9 
i = 10 
Alarm clock


小例子
#include 
#include 

//1秒钟计算机能数多少个数


int main(){
    alarm(1);
    
    int i=1;
    while(1){
        i++;
        printf("i = %d n", i);
    }
    
}
//可以用重定向查看 
gcc _.c -o a
./a >> a.txt
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/618793.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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