面试题
问题:下面这段代码会输出多少次 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 函数。
标签:fork,面试题,sleep,&&,进程,hello From: https://www.cnblogs.com/xianzhedeyu/p/17998789