• linux get_opt sigpause


    1. linux 处理命令行程序时,对输入的参数处理,可以使用get_opt 库函数,方便制作命令行工具。

    2. linux信号:

      信号是由用户,系统或者进程发送给目标进程的信息,用来通知目标进程的某个状态的改变或者或者系统异常。

    发送信号: 

    
    
    #include <sys/types.h>
    #include <signal.h>
    int kill (pid_t pid, int sig);
    
    

    pid 代表目标进程的pid, sig代表要发送的信号。 pid的不同取值,可以实现向多个进程发送信号。

    pid >0 信号发送给进程号为pid的进程

    pid = 0 信号发送给本进程组内的其他进程

    pid = -1 信号发送给除init外的其他所有进程

    pid < -1 信号发送给ID为 -pid的进程组的所有进程

    信号处理:

    目标进程收到信号后,需要定义一个信号处理函数来处理信号 。

    1. signal系统调用

    #include<signal.h>
    _sighandler_t signal(int sig, _sighandler_t _handler);

    typedef void(*__sighandler_t) (int);

    sig指示要捕获的信号类型,_handler是一个函数指针,用于指定信号处理函数。

    2.sigaction

    #include<signal.h>
    int sigaction(int sig, struct sigaction* act, struct signation* oact);

    sig 指示处理的信号类型,act指示信号的处理方式,oact 若不为NULL, 则输出信号先前的处理方式。  

    sigaction 是一个结构体,其定义如下:

       struct sigaction {
                   void     (*sa_handler)(int);
                   void     (*sa_sigaction)(int, siginfo_t *, void *);
                   sigset_t   sa_mask;
                   int        sa_flags;
                   void     (*sa_restorer)(void);
               };

    有些定义把 sa_handler 和sa_sigaction 定义为一个结构体, 避免其被同时注册,即在使用的时候,我们只需向其中的一个注册信号处理函数即可。

    sa_mask 是进程的信号掩码。每个进程都有一个信号掩码,信号掩码是一个“位图”,如果位图中某位标识1,表示该位对应的信号被暂时屏蔽。如果标识为0,表示进程可以接收这个信号。信号的暂时屏蔽和信号的忽略并不等同,信号的暂时屏蔽是指,信号到来时,由于进程将该信号阻塞,所以操作系统并不将该信号传递出去,直到对应的进程解除阻塞,儿信号的忽略则是信号被传递,但是进程忽略了该信号。

    3.sigprocmask

    #include <signal.h>  
      
    int sigprocmask(ubt how,const sigset_t*set,sigset_t *oldset);  
      
    int sigsuspend(const sigset_t*sigmask);  

    该函数用来改变当前进程的信号屏蔽集。其具体的使用方法这里不再赘述。

    4.sigsuspend函数

    sigsuspend的整个原子操作过程为:
    (1) 设置新的mask阻塞当前进程;
    (2) 收到信号,恢复原先mask;
    (3) 调用该进程设置的信号处理函数;
    (4) 待信号处理函数返回后,sigsuspend返回。

    贴两张网上看到的图,解释sigsuspend 和pause的区别。

    ~~~~~
  • 相关阅读:
    数学+高精度 ZOJ 2313 Chinese Girls' Amusement
    最短路(Bellman_Ford) POJ 1860 Currency Exchange
    贪心 Gym 100502E Opening Ceremony
    概率 Gym 100502D Dice Game
    判断 Gym 100502K Train Passengers
    BFS POJ 3278 Catch That Cow
    DFS POJ 2362 Square
    DFS ZOJ 1002/HDOJ 1045 Fire Net
    组合数学(全排列)+DFS CSU 1563 Lexicography
    stack UVA 442 Matrix Chain Multiplication
  • 原文地址:https://www.cnblogs.com/missmzt/p/sigpause.html
Copyright © 2020-2023  润新知