- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读有关 Linux x86-64 系统的信号/ECF 的教科书章节(CS:APP,第 3 版,第 8 章,第 781 页),并遇到了这个:
The sigsuspend function temporarily replaces the current blocked set with mask and then suspends the process until the receipt of a signal whose action is either to run a handler or to terminate the process. If the action is to terminate, then the process terminates without returning from sigsuspend. If the action is to run a handler, then sigsuspend returns after the handler returns, restoring the blocked set to its state when sigsuspend was called.
The sigsuspend function is equivalent to an atomic (uninterruptible) version of the following:
1 sigprocmask(SIG_BLOCK, &mask, &prev);
2 pause();
3 sigprocmask(SIG_SETMASK, &prev, NULL);
sigprocmask(SIG_BLOCK, &mask, &prev)
应该导致阻塞集合与掩码进行或运算,即将掩码中的信号添加到阻塞集合中的信号中。但是代码正上方的文本(以及我查过的 sigsuspend 手册页)说 sigsuspend “暂时用掩码替换了当前的阻塞集”。这听起来更像是
sigprocmask(SIG_SETMASK, &mask, &prev)
对我来说,阻塞集只是设置为等于掩码中的信号。
sigsuspend(&mask)
相当于上面的代码(第 1-3 行)而不是下面的代码(第 4-6 行)?我的直觉和/或对 signal.h 函数的理解哪里出了问题?
4 sigprocmask(SIG_SETMASK, &mask, &prev);
5 pause();
6 sigprocmask(SIG_SETMASK, &prev, NULL);
sigsuspend(&mask)
.无论哪种代码解释是正确的(第 1-3 行或第 4-6 行),在调用 sigsuspend 之后传递的 SIGINT 信号都将被阻塞/不会唤醒进程。但是,如果在调用 sigsuspend 之后立即传递一个 SIGCHLD 信号呢?进程会唤醒/接收信号吗?我的直觉是第 1-3 行会阻塞 SIGCHLD 而第 4-6 行不会,所以很明显第 1-3 行和第 4-6 行是不等价的。但是我的直觉还说 sigsuspend 不应该阻塞 SIGCHLD 因为它不在掩码中,所以第 4-6 行是正确的,如果在这种情况下第 4-6 行等效于 sigsuspend,则 sigsuspend 不能等效于第 1- 3.我的直觉/理解哪里出了问题?
最佳答案
关于技术书籍(尤其是教科书)的事情是,您应该始终了解是否有可用的勘误表。
此 link该书的勘误表显示:
Chapter 8: Exceptional Control Flow
...
...
p. 781. In the description ofsigsuspend
in the second paragraph, line 1 should be:
sigprocmask(SIG_SETMASK, &mask, &prev);
Posted 10/28/2015. Dave O'Hallaron
关于c - sigsuspend 等价于 sigprocmask、pause、sigprocmask 的原子系列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55739801/
我正在编写一个小脚本来练习使用 boost 库。 使用these header /命名空间,这是我的主要功能: int main() { ifstream inNew("../../Downloads
我正在用 SpriteKit 创建我的第一款游戏。我正在尝试暂停我的 GameScene,然后通过 SpriteKit 运行一些动画。问题是,如果我使用 self.view?.isPaused = t
我在尝试暂停倒计时器时遇到问题。我试图做到这一点,以便在单击播放按钮后,该按钮变为暂停按钮。但由于某种原因它不会暂停。 我尝试将 id“pButton”更改为“pauseButton”,这是有效的,但
在滚动更新之前,我想在我们的监控工具中为每台主机设置停机时间。我为此创建了一个自定义模块。设置停机时间时可能会出现问题,我们无法解决。在那种情况下,我想让用户选择是否应中止部署或继续部署而不设置停机时
根据 this paragraph ,以下有问题: /* usr_interrupt is set by the signal handler. */ if (!usr_interrupt)
我有一个 TThread 对象,希望能够通过程序主窗体上的按钮启动/停止线程。我一直在寻找实现这一目标的方法,到目前为止我有以下想法: 当用户单击“停止”时终止并释放线程,并在单击“开始”时创建一个新
这里我有一个方法 public static Color pickColor(){ final aero.colorpicker.Frame frame = new aero.colorpic
我在这个循环中犯了一些错误,我真的无法弄清楚。这是循环: while (true) { System.out.print(stepName[currentTick]);
我刚刚发现 Barba.js 并发现它非常有用。它提供同一网站的 URL 之间的平滑转换。 我整理了一个 Plunker 由两个页面(index.html 和 about.html)组成,借助 jQu
我写了一个程序来尝试用 C 语言编写线程,但这很奇怪 它不会陷入 while 状态(例如 while (1){}) 我尝试用 getchar、scanf 和 while(1) 暂停我的程序,但它没有停
music.pause(); 似乎在我的代码中不起作用。当我单击播放按钮(该按钮是使用 html 5 Canvas 中的框制作的)时,它可以播放音乐,但是当我单击停止按钮时,它不起作用。请帮助我。 这
我一直在用 python 3.3 编写一个基本的计算器,我希望能够在命令窗口中运行它。 但是我一读完它就关闭了窗口,我还没来得及查看最终答案。 所以我想知道是否有等效于 c++ System('PAU
考虑以下代码: 进程 A(在随机时间点): void catch(){}; // empty handler. signal(SIGCHLD,&catch); // attach empty hand
我在 x.m 中使用了函数“pause”(不带参数),但它无法挂起程序。当程序执行此功能时,它只是继续运行。 最佳答案 kbhit对我不起作用。使用 input函数帮助我解决了问题。 关于Octave
我一直在寻找一些自动的方式来编号与 biblatex 的投影机马德里同一张幻灯片上的引用文献。这适用于 \pause和 \footcite{} .但是当我在同一张幻灯片上有多个项目符号(例如 5),并
好的,所以我上周在iOS8推出之前启动了一个应用程序。在iOS7及更低版本中,一切正常。但是现在,由于人们已经更新到iOS8,我的应用程序无故暂停/崩溃。 当我将NSMutableArray设置为NS
试图在我的应用程序中放置一个“暂停”按钮,以播放一些声音片段循环播放。 当我打电话mp.pause();一切都破了,我完全迷路了! 这是我正在使用的方法。 protected void man
我已经尝试过简单的controls =“pause”代码,但是我不想显示可见的音乐播放器。我希望第二次单击“播放按钮”时出现暂停功能。 有没有办法在此代码中插入“点击暂停”功能?我不想看到一个单独的按
所以我有这样的功能: function music(song) { var audio = new Audio("audio/" + song + ".ogg"); audio.play(); } 我
当我在 Chrome 中打开异常时暂停时,它会在弹出 JavaScript 错误时正确暂停,但我看不到异常消息本身。 有什么办法可以在点击“继续”之前看到该消息吗? 注意有时可以尝试从源代码中读取它,
我是一名优秀的程序员,十分优秀!