• APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause


    转载注明出处:Windeal学习笔记

    kil和raise

    kill()用来向进程或进程组发送信号

    raise()用来向自身进程发送信号。
    #include <signal.h>
    int kill(pid_t pid,int signo);
    int raise(int signo);
                                                               Both return: 0 if OK,−1 on error

    kill向进程号为pid的进程发送signo信号
    可以看出 下面两行代码是等价的:
    kill(getpid(), signo);
    raise(signo);

    对于kill函数,其参数pid有四种不同情况:
    pid > 0          表示向进程号为pid的进程发送信号。
    pid==0         将信号发送给同一进程组 且发送进程具有向其发送信号权限 的所有进程(“所有进程”包括系统实现定义的系统进程集
    pid < 0          将信号发送给进程组id为pid绝对值  且发送进程具有向其发送信号权限 的进程(“所有进程”包括系统实现定义的系统进程集
    pid == -1       将信号发送给 发送进程具有发送信号权限的 所有进程(“所有进程”包括系统实现定义的系统进程集

    上面提到发送权限,  发送进程具有发送信号的权限指的是,发送进程的RUID或者EUID 等于 接收进程的RUID或者EUID

    signo为0
     kill(pid,0);执行错误测试,但不发送信号。
    也就是说,kill(pid,0);可以用来测试进程号为pid的进程是否存在。
    如果进程不存在,kill()返回-1 ,且errno被置为ESRCH

    alarm

    原型:
    #include <unistd.h>
    unsigned int alarm(unsigned int seconds);
    <span style="white-space:pre">					</span>Returns: 0 or number of seconds until previously set alarm
    指定seconds秒后产生SIGALARM信号,在不忽略、不捕获SIGALARM时,系统默认动作为终止调用该定时器的进程。
    每个进程只有一个闹钟。
    所以在调用alarm时,如果进程已有闹钟,且还为超时——将剩余时间作为alarm()函数返回值,用新时间seconds替代旧时间;
    进一步,如果如果进程已有闹钟,且还为超时而本次alarm的seconds参数为0,则取消以前的闹钟,并将剩余时间作为返回值。


    pause

    原型:
    #include <unistd.h>
    int pause(void);
                          Returns:−1 with errno set to EINTR
    pause可以使进程休眠,直到发生一个信号。











    APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause
  • 相关阅读:
    txt文本处理---行未添加逗号
    wav转txt格式的代码实现(c,python)
    程序员的健康--预防
    程序员的健康--病因
    朴素贝叶斯算法简介及python代码实现分析
    hdf 5文件格式及python中利用h5py模块读写h5文件
    C 语言restrict 关键字的概念及使用例子
    一个程序员卑微的目标
    【ES】学习4-结构化搜索
    【python】正则表达式中的转义问题
  • 原文地址:https://www.cnblogs.com/Windeal/p/4284649.html
Copyright © 2020-2023  润新知