我想知道等待用户输入的进程实际发生了什么。可以说,在我的代码中,我调用了scanf()来从控制台读取用户输入。它将在内部调用read()系统调用。但在这种情况下,在用户提供任何输入之前,没有数据可供读取。那么我们的过程一直在睡觉吗?
答案 0 :(得分:4)
是的,它正在睡觉(至少在OS X中)。
尝试编译并运行以下C程序:
#include <stdio.h>
int main() {
int x;
puts("Enter a number:");
if (scanf("%d",&x)) {
printf("You entered %d\n",x);
}
else {
puts("That isn't a number");
}
return 0;
}
启动在控制台中运行的程序,然后打开另一个控制台并在命令行输入ps -v
。你应该看到这样的东西:
PID STAT TIME SL RE PAGEIN VSZ RSS LIM TSIZ %CPU %MEM COMMAND
19544 S 0:00.01 0 0 0 2463084 1596 - 0 0.0 0.0 -bash
19574 S 0:00.01 0 0 0 2454892 1568 - 0 0.0 0.0 -bash
19582 S+ 0:00.00 0 0 0 2434816 676 - 0 0.0 0.0 ./a
此处,./a
是程序的名称。 STAT
列中此流程的条目为S+
,这意味着流程正在暂停(S
)且位于前台(+
)。