我想知道等待用户输入的进程实际发生了什么.可以说,在我的代码中,我调用了scanf()来从控制台读取用户输入.它将在内部调用read()系统调用.但在这种情况下,在用户提供任何输入之前,没有数据可供读取.那么我们的过程一直在睡觉吗?
是的,它正在睡眠(至少在 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;
}
Run Code Online (Sandbox Code Playgroud)
启动在控制台中运行的程序,然后打开另一个控制台并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
Run Code Online (Sandbox Code Playgroud)
这里,./a是程序的名称。该进程在STAT列中的条目是S+,这意味着该进程正在睡眠 ( S) 且位于前台 ( +)。
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |