C中父进程向子进程发送信号

2023-12-01

我的子进程无法开始工作。我需要传递信号并执行readUsual功能。

这是一小段代码:

int main()
{
    pid_t pid2 = fork(); 
    if (pid2 < 0) 
        printf("Can't create child process\n");
    else if (pid2==0)
    {
        //this block never execute
        printf("Process2, pid=%d\n",getpid());
        signal(SIGUSR1,readUsual); 
    }
    else 
    {
        kill(pid2,SIGUSR1);
        printf("%s\n","Proccess1 end");
        for(;;);
    }

return 0;
}

您需要以某种方式添加同步,或者调用signal()在你之前fork().

使用您当前的代码,您无法确保子进程调用signal()在它接收到信号之前。在处理信号的指令之前接收信号将停止子进程。

Example:

#include <stdio.h>

#include <sys/types.h>
#include <signal.h>
#include <unistd.h>

static int received = 0;

void readUsual(int sig)
{
    if (sig == SIGUSR1)
    {
        received = 1;
    }
}

int main()
{
    signal(SIGUSR1,readUsual);

    pid_t pid2 = fork(); 
    if (pid2 < 0)
        printf("Can't create child process\n");
    else if (pid2==0)
    {
        printf("Process2, pid=%d\n",getpid());
        while (!received)
            ;
        printf("SIGUSR1 received.\n");
    }
    else 
    {
        kill(pid2,SIGUSR1);
        printf("%s\n","Proccess1 end");
        while (1)
            ;
    }

    return 0;
}

此代码的输出示例:

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

C中父进程向子进程发送信号 的相关文章

  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 当“int”处于最大值并使用 postfix ++ 进行测试时,代码定义良好吗?

    示例 未定义行为的一个示例是整数溢出的行为 C11dr 3 4 3 3 int溢出是未定义的行为 但这是否适用于存在循环的以下内容 并且不使用现在超出范围的副作用i 特别是 这是否后缀增量规格帮助 结果的值计算在副作用之前排序 更新操作数的
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 如何更改 Apache 服务器的根目录? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何更改 Apache 服务器的文档根目录 我基本上想要localhost从 来 users spencer projects目录而不是
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 使用 jq 处理巨大的 GEOJson 文件

    给定一个 GEOJson 文件如下 type FeatureCollection features type Feature properties FEATCODE 15014 geometry type Polygon coordinat
  • Java 计算百分比的算术

    我的 java 应用程序有一个小问题 我必须计算他们完成后的分数 我使用这个方法 public Float ScoreProcent int questions int correct Float x new Float questions
  • Phantomjs 与 Facebook 的 SSL 握手失败 [重复]

    这个问题在这里已经有答案了 我正在尝试使用 phantomjs 为 Facebook 构建一个网络抓取工具 由于 SSL 握手失败 连接失败 我在 Twitter 上得到了相同的结果 但谷歌工作正常 有谁知道这个问题的解决方案 我正在运行
  • Jinja2 中的 zip(list1, list2) ?

    我正在 Jinja2 中进行代码生成 并且经常想一起迭代两个列表 即变量名称和类型 是否有一种简单的方法可以做到这一点 或者我是否需要传递一个预压缩列表 我在中找不到这样的功能docs或谷歌搜索 修改jinja2 Environment全局
  • Visual Studio 2012 中的 c++11 std::mutex 编译器错误

    这是一个关于 C 11 标准中死锁的探索 在 C Concurrency in Action 的 sec3 2 4 中 有一个示例 防止多线程死锁 对于没有这本书的人来说 另外 还有一个几乎类似的例子可以参考 http en cpprefe
  • 在 jupyter 笔记本中保留 pandas 数据框显示的额外空白

    在 jupyter Notebook 中 数据框中多余的空格被删除 但有时这不是首选 例如 df pd DataFrame A a b c B 1 2 df 我得到的结果 A B 0 a b 1 1 c 2 但我想要 A B 0 a b 1
  • 显然缺少 getline() 的重载,在 GCC 4.7.2 和 Clang 3.2 中将 RRef 传输到流

    我在尝试使用时遇到了意外的编译错误getline 使用临时流对象 include
  • mysqli 中的输出 Inserted.row

    我有以下sql表 ID 电子邮件 fbid 当我执行查询时 INSERT INTO users email fbid VALUES randomvalue otherrandomvalue 我想获取插入行的 id 为此 我尝试像这样编辑查询
  • NodeJS:智能 JSON 转换为 Excel 文件

    我正在使用 NodeJS 我想将 JSON 格式的对象导出到 Excel 文件 我很清楚有 至少 三个 npm 包用于此目的 但到目前为止 这些包都没有给我我梦想的输出 这是我的 javascript 对象 var myObject has
  • System.Text.Json.JsonSerializer.Deserialize() 的 .net 5.0 签名更改

    我正在尝试从 NET Core 3 1 到 NET 5 0 并在使用时收到一堆可空性警告Deserialize
  • java中从HTML中删除css信息

    是否有任何库或预先编写的代码可以从 HTML 代码中删除 css 属性 要求是 Java 代码必须解析输入的 html 文档 并删除 css 属性并生成输出 html 文档 例如 如果输入 html 文档具有此元素 p class abc
  • CasperJS/PhantomJS .then 在 do/while 循环中不起作用

    像这样的事情对我来说似乎很合乎逻辑 但导致幻像 wtfcrash 这就是它在日志中的名称 但没有提供有用的信息 do casper then function var targetFound false links this evaluat
  • Java 反射:创建一个实现类

    Class someInterface Class fromName some package SomeInterface 我现在如何创建一个新类来实现someInterface 我需要创建一个新类 并将其传递给需要的函数SomeInter
  • 如何在 android 中的 EditText 上显示数字键盘?

    我基本上只是想在某个 EditText 获得焦点后立即切换到数字键盘模式 您可以配置一个inputType为您EditText
  • 从另一个类方法更新 UI - Cocoa

    我想从 AppDelegate 更新应用程序中的 UI 但每当我这样调用它时 Controller object Controller alloc init object methodHere 好像没有更新UI 我在这里做错了什么 我已经放
  • 如何在flutter图表中显示json数据

    我对 flutter 还很陌生 我一直在尝试在条形图中显示来自 http 请求的一些数据 我找不到任何这方面的例子 我希望你们中的一些人能够提供帮助 我想用这个Chart来自在线画廊 我刚刚更改了我的应用程序的类名称 import pack
  • Sitecore 站点/项目发布在初始化时挂起

    我们的核心数据库出现问题 该数据库已由前一天的备份数据库恢复 之后 该网站工作正常 但我们在发布任何更改时遇到问题 一旦点击发布按钮 发布正在初始化 消息就会持续很长时间 截至 发布开始 结束 的事件日志中也未捕获到这一点 因此 当我们尝试
  • 如何重新启用 event.preventDefault?

    我有一个网页 已阻止所有提交按钮上的默认操作 但是我想重新启用按钮上的默认提交操作 我该如何执行此操作 我目前正在使用以下方法阻止默认操作 form bind submit function e e preventDefault 我已经使用
  • Android SwitchCompat风格

    我在我的新设备上使用 Android 5 1 1 测试了我的应用程序 在我的 SettingsActivity 中我有一个开关 我已经阅读了一些帖子并将其更改为android support v7 widget SwitchCompat但问
  • C中父进程向子进程发送信号

    我的子进程无法开始工作 我需要传递信号并执行readUsual功能 这是一小段代码 int main pid t pid2 fork if pid2 lt 0 printf Can t create child process n else