- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名 C 开发初学者。我试图了解 C 如何管理杀戮、信号和 sleep 。请参阅:
void son1_handler(int sig)
{
printf("[SON1]:");
fflush(stdout);
}
void son2_handler(int sig)
{
printf("[SON2]:");
fflush(stdout);
}
int main(int argc, char **argv)
{
pid_t son1, son2;
son1 = fork();
if (son1 == 0)
{
while (1)
{
signal(SIGUSR1, son1_handler);
};
}
son2 = fork();
if (son2 == 0)
{
while (1)
{
signal(SIGUSR2, son2_handler);
};
}
while (1)
{
sleep(1);
kill(son1, SIGUSR1);
kill(son2, SIGUSR2);
}
}
我的目标是打印:[SON1]:[SON2]:[SON1]:[SON2]....使用上面的代码,有时会得到,有时 [SON2]:[SON1]:[SON2]...
我认为在击杀之间使用 sleep 来改变:
kill(son1, SIGUSR1);
sleep(1);
kill(son2, SIGUSR2);
但令人惊讶的是结果是:[SON2]:[SON2]:[SON2]:[SON2]:[SON2]....
我想我一定是对 sleep 、杀戮或信号有什么误解。你有什么想法?真的提前致谢。
最佳答案
这是因为进程调度。
当您“发送”信号时,PCB 中的相应位 ( Process Control Block ) 会被设置。然后,当调度信号发送到的进程时,它会检查信号并运行处理程序。
在上面的示例中,父进程一个接一个地发送信号,但不能保证“son1”将在“son2”之前执行。
sleep 只是允许操作系统“切换上下文”,即允许其他程序运行。所以,在这种情况下
kill(son1, SIGUSR1);
sleep(1);
kill(son2, SIGUSR2);
您向 son1 发送信号,然后让父进程进入休眠状态。但是,son1 进程不必再次调度在父进程之前。这取决于操作系统的进程调度程序。如果您想实现像您提到的那样的同步,您需要使用某种互斥机制,例如信号量。
希望事情能够解决。
编辑:此外,在 Linux 中,信号处理程序即使在后续调用之后仍保持注册状态,这与 Unix 不同,在 Unix 中信号处理程序在一次调用后就会取消注册。这意味着您只需在子程序中调用 signal() 一次,而不是在 while() 循环的每次迭代中调用。
关于c - 由于某种原因,向子进程发送信号丢失了。 sleep 功能的改变导致了一种奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382923/
我想为我的 parentDiv 中的所有子元素添加鼠标悬停效果。但是现在,如果我将鼠标悬停在其中一个方 block 上,我的 childDivs 的最后一个实际上会更改其背景,无论我将鼠标放在哪个子项
这是我的parentController.js angular .module('myApp') .controller('parentController', parentContr
我是一名优秀的程序员,十分优秀!