SIGCONT 和 SIGHUP 的顺序发送到孤立的 linux 进程组

2023-12-01

APUE 说

由于当父进程终止时,进程组将成为孤立进程,因此 POSIX.1 要求进程组中的每个进程 停止的新孤立进程组(就像我们的孩子一样)将被发送挂起信号(SIGHUP) 随后是继续信号 (SIGCONT)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#define errexit(msg) do{ perror(msg); exit(EXIT_FAILURE); } while(0)
static void sig_hup(int signo)
{
    printf("SIGHUP received, pid = %d\n", getpid());
}
static void sig_cont(int signo)
{
    printf("SIGCONT received, pid = %d\n", getpid());
}
static void sig_ttin(int signo)
{
    printf("SIGTTIN received, pid = %d\n", getpid());
}
static void pr_ids(char *name)
{
    printf("%s: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d\n",
           name, getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));
}
int main(int argc, char *argv[])
{
    char c;
    pid_t pid;
    setbuf(stdout, NULL);
    pr_ids("parent");
    if ((pid = fork()) < 0) {
            errexit("fork error");
    } else if (pid > 0) { /* parent */
            sleep(5);
            printf("parent exit\n");
            exit(0);
    } else { /* child */
            pr_ids("child...1");
            signal(SIGCONT, sig_cont);
            signal(SIGHUP, sig_hup);
            signal(SIGTTIN, sig_ttin);
            kill(getpid(), SIGTSTP);
            //sleep(10);
            pr_ids("child...2");
            if (read(STDIN_FILENO, &c, 1) != 1) {
                    printf("read error from controlling TTY, errno = %d\n", 
                                                             errno);
            }
            printf("child exit\n");
    }
    exit(0);
  }

程序输出:

父级:pid = 2036,ppid = 1959,pgrp = 2036,tpgrp = 2036
子...1:pid = 2037,ppid = 2036,pgrp = 2036,tpgrp = 2036
家长退出
xiejingfeng@xiejingfeng-desktop:/codes/apue$ 收到 SIGCONT,pid = 2037
收到 SIGHUP,pid = 2037
子...2:pid = 2037,ppid = 1,pgrp = 2036,tpgrp = 1959
从控制 TTY 读取错误,errno = 5
儿童出口

输出并不像书上所说的那样,因为程序接收到SIGCONT首先然后SIGHUP,这对我来说很困惑,你们能帮我吗?

提前致谢。


The SIGHUP在孩子的处决恢复之前无法交付。当进程停止时,除了SIGCONT and SIGKILL.

So, the SIGHUP确实先到达,但直到SIGCONT唤醒进程执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SIGCONT 和 SIGHUP 的顺序发送到孤立的 linux 进程组 的相关文章

随机推荐

  • 为什么不鼓励在 Java EE 容器中生成线程?

    关于 Java EE 开发 我学到的第一件事就是我不应该在 Java EE 容器内生成自己的线程 但转念一想 我又不知道原因 你能清楚地解释一下为什么不鼓励吗 我确信大多数企业应用程序都需要某种异步作业 例如邮件守护程序 空闲会话 清理作业
  • 为什么有序列表的 sapply 会输出我的内容两次

    我使用以下代码将文件列表存储在列表中 filesList lt list files path Users myPath data pattern csv 然后我想在没有索引的情况下输出它 通常以形式出现 1 在每一行的开头 所以我尝试了这
  • R 中的环境、mapply 和 get

    Let x lt 2在全局环境中 x lt 2 x 1 2 Let a是一个定义另一个函数的函数x本地并使用get a lt function x lt 1 get x 该函数正确得到x从当地环境来看 a 1 1 现在我们定义一个函数b如下
  • Fluentd apache 格式 [警告]:模式不匹配:

    在我的 etc Fluent Fluent conf 中
  • 如何在不使用 FilePicker 的情况下在固定位置保存和加载 InkCanvas gif 文件

    我想保存并加载InkCanvas gif文件没有FilePicker I saw a sample using FilePicker 但我想保存gif当我单击 保存 按钮时自动文件 例如 当我保存 1InkCanvas gif file 然
  • 安装 PyOpenGLContext 时出现问题(语法错误)

    我最近决定用 python 学习 OpenGL 我使用安装了 PyOpenGLpip3 install PyOpenGl PyOpenGl accelerate 然后我正要遵循一个教程对于 PyOpenGL 第一项是安装 PyOpenGLC
  • 带有垂直行的 HTML 表格

    如何在 HTML 中制作垂直表格 垂直 我的意思是行将垂直 表标题位于左侧 我还需要它的方式 这样我就可以像在普通表中一样访问这些行 在本例中是垂直的 tr 这是因为我动态获取一行的数据 如 A 行 并将其插入表中 我使用 angularJ
  • 将时间格式设置为“24 小时军用时间”?

    我正在将一些 SQL Server 2000 代码更新到 SQL Server 2008R2 并且有一个看起来很像的函数this用于将时间转换为 24 小时格式 在 T SQL 中执行此操作的更酷 更聪明的方法是什么 如果你想要的只是军事时
  • 对不同类型对象的列表进行排序

    我有一个对象列表 其中包含不同类型的对象 但单个属性在所有对象中都是通用的 列表包含 Field 类 Button 类 Page 类等对象 但其中一个属性是通用的 即 sequence no 我想根据 sequence no 对该列表进行排
  • NPM 包错误 - 'newman' 未被识别为内部或外部命令

    我已在我的 64 位 Win 10 计算机中安装了最新版本的 Newman 3 10 0 C Users ABC gt npm install g newman C Users ABC AppData Roaming npm newman
  • 将方法传递给后台工作者 dowork

    在下面的代码中 有没有一种方法可以不总是订阅 updateWorker DoWork 方法 而是向其传递这样的方法 public void GetUpdates SomeObject blah updateWorker DoWork new
  • ImageMagick 中的字体渲染缓慢

    我正在使用以下 ImageMagick 脚本 使用 Imagick for PHP 来生成字体图像 该脚本大约需要 0 1 秒来生成约 30 个字符 大小为 48 的图像 目标速度约为 0 01 秒 恐怕切换到 GD 库可能是实现这一目标的
  • 如何使用jBcrypt检查bcrypt密码? (将存储从 Parse.com 移至 Firebase)

    一些开发人员需要将存储从 parse com 移动到另一台服务器 当我从解析导出数据时 我得到了 json 数据 此 json 数据具有加密密码 bcrypt 例如 2a 10 pcR4SaZd3PMD nXQKMssxupMLncDoFw
  • 为什么 NLTK NaiveBayes 分类器会对一条记录进行错误分类?

    这是我第一次使用 Python 中的 nltk NaiveBayesClassifier 构建情感分析机器学习模型 我知道这个模型太简单了 但这对我来说只是第一步 下次我会尝试标记化句子 我当前模型的真正问题是 我已在训练数据集中将 坏 一
  • 在 Python 中循环 XML

    我的数据集如下
  • 如何限制 Ingres 中任意查询的结果集大小?

    在 Oracle 中 可以通过过滤 虚拟 来限制任意查询中返回的行数rownum柱子 考虑以下示例 它将最多返回 10 行 SELECT FROM all tables WHERE rownum lt 10 有没有一种简单 通用的方法可以在
  • Jquery对话框问题

    大家好 我正在开发一个 MVC 应用程序 我想使用 Jquery 对话框 我有以下情况 我有 Telerik 树视图 当我单击任何节点时 我希望打开对话框并显示有关该节点的信息 首先 我添加以下脚本来初始化对话框 document read
  • 更快的算法来更改位图中的色相/饱和度/亮度

    我正在尝试过滤位图图像以增加或减少色相 饱和度和亮度值 我的代码运行完美 但是它很慢 我在内存中锁定了两个位图 原始源和当前目标 用户可以移动各种trackbar控件修改每个值 然后将其转换为 HSL 值 例如 轨迹栏上的值对应于 1 0
  • 对 JSONPlaceholder 的 POST 请求在后续获取中未生效

    我已经使用 typecode 使用 get 方法对帖子进行了排序 现在我想使用 post 方法自己添加它 我怎样才能正确地做到这一点 这里的问题是 即使发布了 也不会出现在帖子列表中 当我自己添加并在排名中看到它时 我希望它出现在所有帖子中
  • SIGCONT 和 SIGHUP 的顺序发送到孤立的 linux 进程组

    APUE 说 由于当父进程终止时 进程组将成为孤立进程 因此 POSIX 1 要求进程组中的每个进程 停止的新孤立进程组 就像我们的孩子一样 将被发送挂起信号 SIGHUP 随后是继续信号 SIGCONT include