【发布时间】:2011-10-05 12:48:19
【问题描述】:
我正在编写教科书“操作系统概念第 7 版”的练习,我对 fork() 的工作原理有点困惑。据我了解,fork() 创建了一个与父进程同时运行的子进程。但是,我们如何确切地知道哪个进程首先运行呢?我的意思是执行顺序。
问题
使用fork()系统调用编写一个C 程序,在子进程中生成斐波那契数列。序列号将在命令行中提供。
这是我的解决方案:
#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
void display_fibonacci_sequence( int n ) {
int i = 0;
int a = 1;
int b = 1;
int value;
printf( "%d, %d, ", a, b );
for( ;i < n - 2; ++i ) {
value = a + b;
printf( "%d, ", value );
a = b;
b = value;
}
printf( "\n" );
}
int main( int argc, char** argv ) {
int n;
pid_t pid;
pid = fork();
if( argc != 2 ) {
fprintf( stderr, "Invalid arguments" );
exit( -1 );
}
n = atoi( argv[1] );
if( pid < 0 ) {
fprintf( stderr, "Fork failed" );
exit( -1 );
}
else if( pid == 0 ) {
display_fibonacci_sequence( n );
}
else { // parent process
// what do we need to do here?
}
}
说实话,我看不出使用fork 和不使用fork 之间有什么区别。另外,如果我想让 parent 进程处理来自用户的输入,让 child 进程处理显示,我该怎么做呢?
【问题讨论】:
-
哪个进程首先运行(我猜)取决于调度程序。如果您有兴趣,请在 fork() 调用之后获取(高精度)时钟时间并进行比较。
标签: c fork scheduling