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

时间:2016-10-05 10:29:55

标签: c linux-kernel

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

1 个答案:

答案 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)且位于前台(+)。