Linux_信号操作 demo

来源:互联网 发布:u盘在mac上文件不显示 编辑:程序博客网 时间:2024/06/01 10:00

main1.c

#include <stdio.h>#include <stdlib.h>int main(void){    while(1) {        printf("work...\n");        sleep(3);    }    return 0;}

main2.c

#include <stdio.h>#include <stdlib.h>#include <signal.h>void myhandle(int sig) {    printf("Catch a signal : %d\n", sig);}int main(void) {    signal(SIGINT, myhandle);    while (1) {    }    return 0;}

main3.c

#include <stdio.h>#include <stdlib.h>#include <signal.h>void myhandle(int sig) {    static int cnt = 0;    printf("Catch a signal : %d\n", sig);    signal(SIGINT, SIG_DFL); //µ»Õ¨”⁄signal(sig, SIG_DFL);}int main(void) {    signal(SIGINT, myhandle);    while (1) {    }    return 0;}

main4.c

#include <stdio.h>#include <stdlib.h>#include <signal.h>void myhandle(int sig) {    printf("Catch a signal : %d\n", sig);}int main(void) {    struct sigaction act;    act.sa_handler = myhandle;    sigemptyset(&act.sa_mask);       act.sa_flags = 0;    sigaction(SIGINT, &act, 0);    while (1) {    }    return 0;}

main5.c

#include <stdio.h>#include <stdlib.h>#include <signal.h>void myhandle(int sig) {    printf("Catch a signal : %d\n", sig);}int main(void) {    struct sigaction act;    act.sa_handler = myhandle;    sigemptyset(&act.sa_mask);    //act.sa_flags = 0;    act.sa_flags = SA_RESETHAND;    sigaction(SIGINT, &act, 0);    while (1) {    }    return 0;}

main6.c

#include <stdio.h>#include <stdlib.h>#include <signal.h>int workflag = 0;void work_up_handle(int sig) {    workflag = 1;}void work_down_handle(int sig) {    workflag = 0;}int main(void) {    pid_t pd;    char c;    pd = fork();    if (pd == -1) {        printf("fork error!\n");        exit(1);    } else if (pd == 0) {        char *msg;        struct sigaction act;         act.sa_flags = 0;        act.sa_handler = work_up_handle;        sigemptyset(&act.sa_mask);              sigaction(SIGUSR1, &act, 0);        act.sa_handler = work_down_handle;        sigaction(SIGUSR2, &act, 0);        while (1) {            if (!workflag) {                msg = "child process work!";            } else {                msg = "CHILD PROCESS WORK!";            }            printf("%s\n", msg);            sleep(1);        }    } else {        while(1) {            c = getchar();            if (c == 'A') {                kill(pd, SIGUSR1);            } else if (c == 'a') {                kill(pd, SIGUSR2);            }        }    }    return 0;}

main7.c

#include <stdio.h>#include <stdlib.h>#include <signal.h>int wakeflag = 0;void wake_handle(int sig) {    wakeflag = 1;}int main(void) {    pid_t pd;    char c;    pd = fork();    if (pd == -1) {        printf("fork error!\n");        exit(1);    } else if (pd == 0) {        sleep(5);        kill(getppid(), SIGALRM);    } else {        struct sigaction act;         act.sa_handler = wake_handle;        act.sa_flags = 0;        sigemptyset(&act.sa_mask);        sigaction(SIGALRM,  &act, 0);        pause(); //∞—∏√Ω¯≥Ãπ“∆£¨÷±µΩ ’µΩ»Œ“‚“ª∏ˆ–≈∫≈        if (wakeflag) {            printf("Alarm clock work!!!\n");        }    }    return 0;}

main8.c

#include <stdio.h>#include <stdlib.h>#include <signal.h>#include <time.h>int wakeflag = 0;void wake_handle(int sig) {    wakeflag = 1;}int main(void) {    int ret;    struct sigaction act;    act.sa_flags = 0;    act.sa_handler = wake_handle;    sigemptyset(&act.sa_mask);    sigaction(SIGALRM, &act, 0);    printf("time =%ld\n", time((time_t*)0));    ret = alarm(5);    if (ret == -1) {        printf("alarm error!\n");        exit(1);    }    //π“∆µ±«∞Ω¯≥ã¨÷±µΩ ’µΩ»Œ“‚“ª∏ˆ–≈∫≈    pause();    if (wakeflag) {        printf("wake up, time =%ld\n", time((time_t*)0));    }    return 0;}

main9.c

#include <stdio.h>#include <stdlib.h>#include <signal.h>int wakeflag = 0;void wake_handle(int sig) {    printf("in handle\n");   // ‘⁄∏√–≈∫≈¥¶¿Ì∫Ø ˝÷– π”√printf£¨“‘±„µ˜ ‘£¨±æ≤ª“À π”√£¨“ÚŒ™printf «≤ªø…÷ÿ»Îµƒ    sleep(10);    printf("in handle2\n");    wakeflag = 1;}int main(void) {    pid_t pd;    char c;    pd = fork();    if (pd == -1) {        printf("fork error!\n");        exit(1);    } else if (pd == 0) {        sleep(3);        kill(getppid(), SIGALRM);    } else {        struct sigaction act;         act.sa_handler = wake_handle;        act.sa_flags = 0;        sigemptyset(&act.sa_mask);        sigaddset(&act.sa_mask, SIGALRM); //SIGINT);        sigaction(SIGALRM,  &act, 0);        pause(); //∞—∏√Ω¯≥Ãπ“∆£¨÷±µΩ ’µΩ»Œ“‚“ª∏ˆ–≈∫≈        if (wakeflag) {            printf("Alarm clock work!!!\n");        } else {            printf("Alarm clock not work!\n");        }    }    return 0;}
0 0
原创粉丝点击