SIGCHLD 在 Linux 上通过 SIGCONT 发送,但在 macOS 上不发送

2023-11-29

在主进程中我监听SIGCHLD:

signal(SIGCHLD, &my_handler);

Then I fork(), execv()并让它在后台运行(例如/bin/cat)。

当我尝试从终端向子进程发送 SIGSTOP 时,my_handler()被叫。但是当我尝试向它发送 SIGCONT 时,处理程序不会在 macOS 上调用,而是在我的 Ubuntu 上执行。

Man:

SIGCHLD:子状态已更改。

我错过了什么吗?这是预期的行为吗?我在 Ubuntu 上编写了我的应用程序,并希望它也能在 Mac 上运行。

我尝试过sigaction()也是如此,但结果相同。

这是一个示例代码来演示:

#include <signal.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

void    my_handler(int signum)
{
    printf("\t SIGCHLD received\n");
    fflush(stdout);
}

void    my_kill(pid_t pid, int signum)
{
    printf("Sending %d\n", signum);
    fflush(stdout);

    kill(pid, signum);

    printf("Sent %d\n\n", signum);
    fflush(stdout);
}

int main()
{
    pid_t   pid;
    char    *cat_args[2] = {"/bin/cat", NULL};

    signal(SIGCHLD, &my_handler);
    pid = fork();

    if (pid == 0)
    {
        execv("/bin/cat", cat_args);
    }
    else
    {   
        my_kill(pid, SIGSTOP);
        my_kill(pid, SIGCONT);
        wait(NULL);
    }
    return 0;
}

macOS 上的输出:

Sending 17
         SIGCHLD received
Sent 17

Sending 19
Sent 19

该行为是可选的。实现不需要在继续时生成 SIGCHLD。 POSIX.1-2008(2016版)中使用的语言是“may”而不是“shall”:

当停止的进程继续运行时,SIGCHLD 信号may为其父进程生成,除非父进程已设置 SA_NOCLDSTOP 标志。

- 系统接口,2.4.3 信号动作

...SIGCHLD 信号may每当其任何停止的子进程继续运行时,都会为调用进程生成。

- 系统接口sigaction“描述”

添加了强调。

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

SIGCHLD 在 Linux 上通过 SIGCONT 发送,但在 macOS 上不发送 的相关文章

  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 函数参数的默认参数是否被视为该参数的初始值设定项?

    假设我有这样的函数声明 static const int R 0 static const int I 0 void f const int r R void g int i I 根据 dcl fct default 1 如果在参数声明中指
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 使用 GCP 的数据存储区时如何区分代码是在模拟器中运行还是在 GKE 中运行

    按照中给出的说明进行操作后 我不确定是否遗漏了任何内容https cloud google com datastore docs tools datastore emulator https cloud google com datasto
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • VIP 交换和持久性 - VIP 何时被回收?

    VIP交换 CNAME比IP交换 A记录好在哪里 作为上述的延续 我非常接近恢复到 A 记录 因为我遇到的问题在 Azure 中使用 CNAME 来自Azure 文档 其中指出 但请注意 因为 IP 地址的生命周期是相关的 对于部署 重要的
  • Web Deploy 3.0 无法在 CI 服务器上运行

    从我的本地计算机到开发服务器 Web Deploy 3 0 可以使用以下命令与 Visual Studio 2012 发布配置文件正常配合 msbuild myproj csproj verbosity d p DeployOnBuild
  • Codeigniter 分组并创建多维数组

    我的模型中有一个函数 public function get job lsnumber FALSE this gt db gt join administrator job idadministrator administrator ida
  • ehcache diskstore可以安全地并发访问吗?

    我看到 DiskStore 位置有一个 lock 文件 我一直明白 使文件 IO 原子化是很困难的 有时甚至是不可能的 所以 我的期望是多个应用程序不能安全地使用同一个 ehcache DiskStore 然而 锁定文件让我想知道 抛开性能
  • 绿屏/色度键 iOS

    我正在尝试在 iOS 上实时进行绿屏减法 我已将 openCV 包含在我的项目中 我可以使用本教程从相机获取原始数据 http www benjaminloulier com articles ios4 and direct access
  • 如何在字典中的特定键之间交换值?

    假设你有一本这样的字典 d A content for A B content for B 在两个条目之间交换值的最有效方法是什么 所以结果应该是这样的 d A content for B B content for A 当然 你可以创建一
  • 返回具有公差的唯一元素

    在Matlab中 有这样的unique command返回数组中唯一的行 这是一个非常方便的命令 但问题是我无法为其分配容差 在双精度中 我们总是必须比较精度内的两个元素 是否有一个内置命令可以在一定的容差范围内返回唯一元素 到了R2015
  • Java Try Catch 块

    我最初在大学开始编程并学习了 vb net 现在我决定转向 Java 并有一些疑问 在vb中 try catch语句的布局如下 try Catch ex as exception finally End catch 但是从java网站 ht
  • 如何使用 Appscript doPost 创建 REST API?

    1个月后 我想再次提出这个话题的问题 这是包含所有链接的整篇文章 https docs google com document d 1Tb0 twzHl wXbvaNF2IpCT0CiONT9PoqPlEweLz3oYI edit 项目中有
  • 使用 OWASP Java HTML Sanitizer 清理 html 时如何允许嵌入图像

    我想允许 img src I see 有关于如何执行此操作的文档但我不明白如何实现它 我尝试添加模式 allowUrlProtocols data allowAttributes src matching Pattern compile d
  • Emacs ess 自动完成

    我是 R 用户 我想在 emacs 中使用 R 但是 我在 emacs 中自定义 ess 时遇到了麻烦 我已经在我的 emacs 中安装了自动完成包和最新的 ess 但是当我在 emacs 中运行 r 时 自动完成功能无法正常工作 当我输入
  • 一种路由分配程序算法

    我想做的是创建一个程序 为驾驶考试分配一条路线 将有三条不同的路线 在某些点连接在一起 交叉点上绝不应有超过一名学生 解决这个问题的最佳方法是按时间安排交叉点 这不是我唯一的问题 我需要将路线平均分配给考官 所以路线1将交给考官1 路线 2
  • 如何使用 AppleScript 关闭终端选项卡?

    我正在使用 AppleScript 在 终端 选项卡中打开 PostgreSQL 如下所示 bin bash function new tab TAB NAME 1 COMMAND 2 osascript e tell applicatio
  • 有没有办法让视差在 DIV 中发挥作用

    可能完全是在树错树 但是你能使用 div 背景图像元素制作视差滚动图像吗 我想要发生的是 我目前有一些带有带有文本效果翻转的图像的 DIV 但因为我在背景图像中使用视差 所以我想保留所有站点图像的 3D 主题 编辑 例如 是否可以在此页面上
  • 如何检测手机是否连接到 Android Auto

    我正在制作一个应用程序 当手机连接到 Android Auto 时 它应该改变其行为 它不具有任何汽车功能 并且不会作为 Android Auto 应用程序进行营销 提交 有没有办法检测手机是否连接到 Android Auto 我知道汽车媒
  • 如何以编程方式安装 NuGet 包?

    我想以编程方式将 NuGet 包安装到项目中 并更新 csproj文件 以及packages config file 我用的是官方的Nuget core框架的源代码可以在这里找到 https github com NuGet NuGet2
  • Frame.__init__ 是做什么的?

    在下面的代码中 第 5 行是什么Frame init 做 有人可以解释一下它背后的概念吗 多谢 from Tkinter import class AppUI Frame def init self master None Frame in
  • 早期初始化程序中的匿名部分函数需要“过早访问类”

    为什么编译失败 trait Item trait StringItem extends Item def makeString String trait SomeOtherItem extends Item trait DummyTrait
  • jQuery 防止默认操作功能键(F3、F4 等)

    我这里有一个非常基本的例子 http jsfiddle net arhVd 1
  • SIGCHLD 在 Linux 上通过 SIGCONT 发送,但在 macOS 上不发送

    在主进程中我监听SIGCHLD signal SIGCHLD my handler Then I fork execv 并让它在后台运行 例如 bin cat 当我尝试从终端向子进程发送 SIGSTOP 时 my handler 被叫 但是