• Unix系统编程()发送信号的其他方式:raise和killpg


    有时,进程需要向自身发送信号,raise 函数就执行了这一任务。

    #include <signal.h>

    int raise(int sig);

    在单线程程序中,调用raise相当于对kill的如下调用:

    kill(getpid(), sig);

    支持线程的系统会将raise(sig)实现为:
    pthread_kill(pthread_self(), sig)

    后面会描述pthread_kill函数,但目前仅需要了解一点就已足够,该实现意味着将信号传递给调用raise的特定线程。相比之下,kill(getpid(), sig)调用会发送一个信号给调用进程,并可将该信号传递给该进程的任一线程。

    raise函数起源于C89。C语言标准不包含诸如进程ID之类的操作系统细节,raise函数之所以得以定义,是因为该函数不需要引用进程ID。

    当进程使用raise后者kill向自身发送信号时,信号将立即传递(即,在raise返回调用者之前)。

    注意,raise出错将返回非0值(不一定为-1)。调用raise唯一可能发生的错误为EINVAL,即sig无效。因此,在任何指定了某一SIGxxxx常量的位置,都未检查该函数的返回状态。

    killpg调用相当于对kill的如下调用
    kill(-pgrp, sig);

    如果指定pgrp的值为0,那么会向调用者所属进程的所有进程发送此信号。SUSv3对此未做规范,但大多数UNIX实现对该情况的处理与Linux相同。

  • 相关阅读:
    动手实验01-----vCenter 微软AD认证配置与用户授权
    esxi 主机用户功能说明
    vCenter组件和服务
    配置vSphere Web Client超时值
    如何修改 Vmware vRealize Operations Manager Appliance root密码
    linux如何搭建sftp服务器
    Vmware vSphere 开启嵌套虚拟化
    在VS2013上配置OpenCV1.0
    FFmpeg深入分析之零-基础
    坚持看英文文档
  • 原文地址:https://www.cnblogs.com/tuhooo/p/8678084.html
Copyright © 2020-2023  润新知