美文网首页
信号(四)

信号(四)

作者: 千里山南 | 来源:发表于2016-02-25 17:26 被阅读17次

    2016-02-25

    abort函数

    void abort(void)
    此函数将SIGABRT信号发送给调用进程。进程不应该忽略此信号。
    ANSIC要求捕获到此信号而且相应信号处理程序返回,abort仍不会返回到其调用者。如果捕捉到此信号,这信号处理程序不能返回的唯一方法是它调用exit _exit longjmp siglongjmp POSIX1也说明abort覆盖了进程对此信号的阻塞和忽略。
    让进程捕捉SIGABRT的意思是:在进程终止之前由其自行所需的清除操作。如果进程并不在信号处理程序中终止自己,POSIX说明当信号处理程序返回时abort终止该进程。
    ANSIC对此函数的规格说明将这一问题留由实现决定,而不管输出流是否刷新以及不管临时文件是否删除。POSIX要求则更进一步,它要求如果abort调用终止进程则它应该有对所有打开的标准io流调用fclose的效果。但是如果调用abort并不终止进程,则它对打开的流也不应有影响。

    system函数

    POSIX要求system忽略SIGQUIT和SIGINT阻塞SIGCHLD。
    system的返回值
    system的返回值是shell的终止状态,它不总是执行命令字符串进程的终止状态。当且仅当shell本身异常终止时,system的返回值才报告一个异常终止。

    sleep函数

    unsigned int sleep(unsigned int seconds)
    此函数使调用进程被挂起直到:

    • 已经过了seconds所指定的墙上时钟时间
    • 该进程捕捉到一个信号并且从信号处理程序返回
      如同alarm信号一样,由于某些系统活动,实际返回时间会比所要求的迟一些。
      超时返回值是0 由于捕捉到信号sleep提早返回时返回值是未睡眠足的秒数
      sleep可以用alarm函数实现,但这并不是必须的。如果使用alarm,则这两个函数之间是可以有交互作用。POSIX标准对这些交互作用并未做任何说明。

    作业控制信号

    • SIGCHLD子进程已经停止或者终止
    • SIGCONT 如果进程已经停止,则使其继续运行
    • SIGSTOP 停止信号
    • SIGSTP 交互停止信号
    • SIGTTIN 后台进程组的成员读控制终端
    • SIGTTOU 后台进程组的成员写控制终端
      大多数应用程序并不处理这些信号,交互式shell通常处理这些信号的所有工作。当键入挂起字符(通常是Ctrl-Z)时,SIGTSTP被送至后台进程组的左右进程。当通知shell在前台或后台恢复一个作业时,shell向作业中的左右进程发送SIGCONT信号。与之类似的有如果向一个进程递送了SIGTTIN 或者 SIGTTOU 信号,则根据系统默认,此进程停止,作业控制shell了解到这一点后会通知我们。
      一个例外是管理终端的进程,例如Vi 编辑程序。当用户要挂起它时,它需要能了解到这一点,这样就能将终端状态恢复到Vi 启动时的情况。另外,当在前台恢复它时,它需要将终端状态设置回所希望的状态,并需要重新绘制终端屏幕。

    相关文章

      网友评论

          本文标题:信号(四)

          本文链接:https://www.haomeiwen.com/subject/qfoikttx.html