等待用户输入的进程实际发生了什么?

tec*_*ek7 5 c linux-kernel

我想知道等待用户输入的进程实际发生了什么.可以说,在我的代码中,我调用了scanf()来从控制台读取用户输入.它将在内部调用read()系统调用.但在这种情况下,在用户提供任何输入之前,没有数据可供读取.那么我们的过程一直在睡觉吗?

squ*_*age 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;
}
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) 且位于前台 ( +)。