如何在Minix 3中等待系统调用

时间:2013-03-10 19:33:45

标签: process system-calls minix

我需要在minix中实现一个系统调用,它会在返回之前等待某个条件为真。但是,我发现只是尝试像

这样的东西
while (var != desired_value)
{
    // wait
}

不起作用,因为虽然它确实阻止了进程,但它也阻止了在minix中运行的所有其他进程。我甚至无法切换到另一个虚拟终端并登录。我认为minix进程应该彼此独立运行,但看起来当系统调用上的任何进程阻塞时,所有其他进程同时被挂起。这可能是正确的吗?谢谢

2 个答案:

答案 0 :(得分:0)

当然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,因此您可以使用forkexec等来操作流程。

答案 1 :(得分:0)

Minix系统调用是原子过程,这意味着即使调度程序也不能中断它们。等待无法发生的情况会导致死锁。