面试题1

面试题

问题:下面这段代码会输出多少次 hello ?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void test() {
  fork() && fork() && fork() && sleep(10);
  printf("hello\n");
  exit(0);
}

int main() {
  test();
  return 0;
}

先说下答案:4 次

我本地测试的结果:

hello
hello
hello
# sleep(10)
hello

解析

这道题的考点是 fork 函数和 && 操作符。

  • fork 函数用来复制一份主程序,即创建主进程的子进程。一次 fork 会返回两次值,主进程返回子进程的进程ID,子进程中返回0。
  • && 两边都为 true 时,整个运算结果才为 true。具有短路功能,即第一个表达式为 true 时,则不再计算第二个表达式。

所以,主进程中,会逐个执行三次 fork,并sleep(10)。子进程中,&& 操作短路,直接执行 printf 函数。

posted @ 2024-01-31 11:01  我的娃会叫爸爸啦  阅读(3)  评论(0编辑  收藏  举报