栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

子进程接收父级的SIGINT

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

子进程接收父级的SIGINT

如果要在Unix系统上

SIGINT
使用
Ctrl
+ 生成with
C
,则信号将发送到整个进程组。

您需要使用setpgid或setid将子进程放入另一个进程组,以便它不会接收控制终端生成的信号。


[编辑:]

确保

setpgid
仔细阅读页面的RATIONALE部分。在这里插入所有潜在的比赛条件有点棘手。

为了保证100%不会

SIGINT
向您的子进程发送任何内容,您需要执行以下操作:

#define CHECK(x) if(!(x)) { perror(#x " failed"); abort();  }sigset_t mask, omask;sigemptyset(&mask);sigaddset(&mask, SIGINT);CHECK(sigprocmask(SIG_BLOCK, &mask, &omask) == 0);pid_t child_pid = fork();CHECK(child_pid >= 0);if (child_pid == 0) {        CHECK(setpgid(0, 0) == 0);    execl(...);    abort();}if (setpgid(child_pid, child_pid) < 0 && errno != EACCES)    abort(); CHECK(sigprocmask(SIG_SETMASK, &omask, NULL) == 0);

严格来说,这些步骤中的每一个都是必要的。您必须封锁讯号,以防使用者在拨打电话后立即按下

Ctrl
+
。您必须召集孩子,以防万一在父母有时间做任何事情之前发生。您必须打电话给父母,以防 父母 奔跑而有人在_孩子_ 有时间做任何事情之前打+。
C``fork``setpgid``execl``setpgid
Ctrl`` C

上面的序列很笨拙,但确实可以处理100%的比赛条件。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403013.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号