UNIX 操作系统中,fork()系统调用用于创建进程。
仔细阅读、分析下列程序,假设程序正确运行并创建子进程成功,那么,输出到屏幕的正确结果是()。
main() pid t pid; pid = fork(); if (pid == 0) printf ("Hello World\n"); else if (pid > o) printf ("Hello World\n"); else printf ("Hello World\n");
什么都没有
1行Hello World
2行Hello World
3行Hello World
答案
2行Hello World
解析
在UNIX操作系统中,fork()系统调用用于创建一个与当前进程几乎一模一样的新进程,这个新进程被称为子进程。当fork()成功执行时,它返回两次:一次在父进程中返回新创建的子进程的PID(进程ID),一次在子进程中返回0。如果fork()失败,则在父进程中返回一个负值。
根据给出的程序,有三个printf语句,分别在三个条件分支中:
if (pid == 0):这个分支在子进程中执行,因为fork()在子进程中返回0。
else if (pid > 0):这个分支在父进程中执行,因为fork()在父进程中返回新创建的子进程的PID。
else:这个分支在父进程中执行,因为在fork()失败时,它在父进程中返回一个负值。
由于题目中假设程序正确运行并创建子进程成功,那么fork()将会在两个进程中各返回一次,一次在父进程中,一次在子进程中。因此,"Hello World"将会被打印两次,分别在父进程和子进程中。
所以,输出到屏幕的正确结果是:
Hello World
Hello World
注意:实际的输出顺序取决于操作系统的调度机制,可能是一行先输出,也可能同时输出,或者另一行先输出。但无论如何,最终结果应该是这两行文本。