【问题标题】:How to wait inside a system call in Minix 3如何在 Minix 3 中的系统调用中等待
【发布时间】:2013-03-10 19:33:45
【问题描述】:
我需要在 minix 中实现一个系统调用,等待某个条件为真后再返回。但是,我发现只是尝试像
while (var != desired_value)
{
// wait
}
不起作用,因为虽然它确实阻塞了进程,但它也阻塞了在 minix 中运行的所有其他进程。我什至无法切换到另一个虚拟终端并登录。我认为 minix 进程应该彼此独立运行,但看起来当任何进程阻塞系统调用时,所有其他进程同时被挂起。这可能是正确的吗?谢谢
【问题讨论】:
标签:
process
system-calls
minix
【解决方案1】:
当然 Minix 有一个非阻塞等待机制:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status)
pid_t waitpid(pid_t pid, int *status, int options)
wait 导致其调用方延迟,直到收到信号或其子进程之一终止。
waitpid 为在收集子进程状态时不得阻塞或希望等待一个特定子进程的程序提供备用接口。
Minix 提供 POSIX,因此您可以使用fork、exec 等来操作进程。
【解决方案2】:
Minix 系统调用是原子过程,这意味着它们不能被中断,即使是调度程序。等待不能发生的条件会导致死锁。