zoukankan      html  css  js  c++  java
  • apue 第10章 信号signal

    每种信号都有名字,都是以SIG开头

    信号机制最简单的接口是signal函数

    #include <signal.h>
    
    typedef void (*sighandler_t)(int);
    
    sighandler_t signal(int signum, sighandler_t handler);
    返回值:成功以前的信号处理配置,出错SIG_ERR

    kill函数将信号发送给进程或进程组。raise函数则允许进程向自身发送信号

    #include <sys/types.h>
    #include <signal.h>
    
    int kill(pid_t pid, int sig);
    
    int raise(int sig);
    返回值:成功0,出错-1

    使用alarm可以设置一个定时器,在将来的某个时刻该定时器会超时

    #include <unistd.h>
    
    unsigned int alarm(unsigned int seconds);
    返回值:0或以前设置的闹钟时间的余留秒数

    pause函数使调用进程挂起直至捕捉到一个信号

    #include <unistd.h>
    
    int pause(void);
    返回值:-1,errno设置EINTR

    我们需要一个能表示多个信号的-----信号集

    #include <signal.h>
    
    int sigemptyset(sigset_t *set);
    int sigfillset(sigset_t *set);
    int sigaddset(sigset_t *set, int signum);
    int sigdelset(sigset_t *set, int signum);
    返回值:成功0,出错-1
    int sigismember(const sigset_t *set, int signum);
    返回值:真返回1,假0

    检测或更改,或同时进行检测和更改进程的信号屏蔽字

    #include <signal.h>
    
    int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
    返回值:成功0,出错-1

    返回一信号集,该信号通过set参数返回

    #include <signal.h>
    
    int sigpending(sigset_t *set);
    返回值:成功0,出错-1

    功能是检查或修改与指定信号相关联的处理动作。

    #include <signal.h>
    
    int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
    返回值:成功0,出错-1

    非局部转移函数

    #include <setjmp.h>
    
    int setjmp(jmp_buf env);
    
    int sigsetjmp(sigjmp_buf env, int savesigs);
    返回值:直接调用0,若从siglongjmp调用返回,则为非0
    void longjmp(jmp_buf env, int val0;
    void siglongjmp(sigjmp_buf env, int val);

    在运行pause中,信号可能会丢失。为了纠正问题,需要在院子操作中先恢复信号屏蔽字,然后休眠。

    #include <signal.h>
    
    int sigsuspend(const sigset_t *mask);
    返回值:-1,并将errno设置为EINTR

    终止异常的工作

    #include <stdio.h>
    
    void abort(void);
    返回值:不返回

    睡眠函数,但是都有缺陷

    #include <unistd.h>
    
    unsigned int sleep(unsigned int seconds);
    返回值:0或未休眠完的秒数

    nanosleep函数与sleep函数类似,提供了纳秒级精度

    #include <time.h>
    
    int nanosleep(const struct timespec *req, struct timespec *rem);
    返回值:休眠到要求的时间,返回0,出错-1

    需要使用相对于特定时钟的延迟时间来挂起调用线程。

    #include <time.h>
    
    int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *request, struct timespec *remain);
    返回值:休眠要求的时间,返回0,出错返回错误码

    使用sigqueue函数发送信号

    #include <signal.h>
    
    int sigqueue(pid_t pid, int sig, const union sigval value);
    返回值:成功0,出错-1

    可以使用psinal函数可移植的打印与信号编号对应的字符串

    #include <signal.h>
    
    void psignal(int sig, const char *s0;
    void psiginfo(const siginfo_t *pinfo, const char *s);

    如果只需要信号的描述部分,与不需要把它写到标准错误文件中

    #include <string.h>
    
    char *strsignal(int sig);
    返回值:指向描述该信号的字符串的指针
    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    php 注册与登录
    php 多条件查询
    php(ajax)异步刷新(转)
    PHP中的6种加密方式
    ajax 异步刷新,需要填写的参数
    php+Mysql 页面登录代码
    php+Mysql页面注册代码
    jquery入门知识点总结(转)
    php+Mysql中网页出现乱码的解决办法详解
    php代码常见错误详解整理
  • 原文地址:https://www.cnblogs.com/ch122633/p/8203673.html
Copyright © 2011-2022 走看看