美文网首页Shell 脚本成长笔记
信号(三):Bash 中的信号

信号(三):Bash 中的信号

作者: 赵者也 | 来源:发表于2017-05-22 20:46 被阅读3次

当没有任何捕获时,一个交互式 Bash Shell 会忽略 SIGTERM 和 SIGQUIT 信号。由 Bash 运行的非内部命令会使用 Shell 从其父进程继承的信号处理程序。如果没有启用作业控制,异步执行的命令会忽略除了有这些信号处理程序之外的 SIGINT 和 SIGQUIT 信号。由于命令替换而运行的命令会忽略键盘产生的作业控制信号 SIGTTIN、SIGTTOU 和 SIGTSTP。

默认情况下,Shell 接收到 SIGHUP 信号后会退出。在退出之前,一个交互式的 Shell 会向所有的作业,不管是正在运行的还是已停止的,重新发送 SIGHUP 信号。对已停止的作业,Shell 还会发送 SIGCONT 信号以确保它能够接收到 SIGHUP 信号。若要阻止 Shell 向某个特定的作业发送 SIGHUP 信号,可以使用内部 disown 将它从作业表中移除,或是用 “disown -h” 命令阻止 Shell 向特定的作业发送 SIGHUP 信号,但并不会将特定的作业从作业表中移除。我们通过如下实例,来了解一下 disown 命令的作用:

# 将 sleep 命令放在后台执行,休眠 30 秒
sleep 30 &

# 列出当前 Shell 下所有作业的信息
jobs -l

# 将作业 1 从作业表中移除
disown %1

# 再次列出当前 Shell 下所有作业的信息
jobs -l

# 查找 sleep 进程
ps -ef | grep sleep

# 打印当前 Shell 的进程号
echo $$

运行结果:

运行结果

在上述实例中,虽然作业表中已经没有了作业,但是进程依然存在。此时,Shell 若收到 SIGHUP 信号,它就不会向作业 1 重写发送 SIGHUP 信号,此时如果我们退出 Shell,这个作业仍将继续运行,而不会被终止。

本文参考自 《Linux Shell命令行及脚本编程实例详解

相关文章

  • 信号(三):Bash 中的信号

    当没有任何捕获时,一个交互式 Bash Shell 会忽略 SIGTERM 和 SIGQUIT 信号。由 Bash...

  • 阿里云SSH断开影响后台

    挂断信号(SIGHUP)默认的动作是终止程序打开ssh默认下面的所有bash都是他的子程序,关闭ssh后,挂断信号...

  • Django信号触发

    编写的信号总是不能触发。信号触发主要需要三个条件: 1.信号能正常工作 2.在app的config中触发信号 3....

  • C/C++面试题

    1, 信号的声明周期 答: 信号的产生 -> 信号在进程中注册 -> 信号在进程中的注销 -> 执行信号处理函数 ...

  • 一些面试题

    1, 信号的声明周期 答: 信号的产生 -> 信号在进程中注册 -> 信号在进程中的注销 -> 执行信号处理函数 ...

  • 信号(一):Linux 中的信号

    Linux 中的信号 在类 Unix 操作系统中,信号被用于进程间通信。信号是一个发送到某个进程或同一进程中的特定...

  • rac 事件概述及处理

    概述:想要知道rac就必须知道rac中的三个要点 创建信号、发送信号、订阅信号。 reactive事件 reac...

  • 信号#1

    信号的概念 取决于进程的要求,内核对Signal信号有如下三种行为: 忽略信号 抓住这个信号并且对这个信号进行处理...

  • 信号(三)·

    2016-02-17 alarm 和 pause函数 使用alarm函数可以设置一个时间值,在将来的某个时刻该时间...

  • dispatch_semaphore_t详解

    定义在semaphore.h中,一共三个api 创建信号量 信号量-1 信号量+1 原理:调用dispatch_s...

网友评论

    本文标题:信号(三):Bash 中的信号

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