Unix 为什么';给定进程是否异步运行?
我正在Unix 为什么';给定进程是否异步运行?,unix,process,fork,Unix,Process,Fork,我正在main中运行.c文件中的以下代码 int main(void){ int id = fork(); int n; if(id == 0){ // child process n = 1; }else{ n = 6; } for(size_t i=n; i<n+5; i++){ printf("%ld ", i); } printf("
main
中运行.c
文件中的以下代码
int main(void){
int id = fork();
int n;
if(id == 0){
// child process
n = 1;
}else{
n = 6;
}
for(size_t i=n; i<n+5; i++){
printf("%ld ", i);
}
printf("/n");
return 0;
}
也就是说,先运行父进程,然后再运行子进程。我已经运行了20多次,结果总是一样的。我是否错过了有关fork
的内容
我在x86-64 Linux机器上如果添加
fflush(stdout)代码>在printf之后(“%ld”,i)代码>,您是否看到正在交错的输出?每次更改后运行时,输出是否略有不同?是否应该立即打印给定值而不是缓冲(我猜默认情况下是printf
buffers)?在使用fflush
时,10次执行中的1次(大致)会改变顺序,但大多数情况下fflush
不会有任何区别。是的,当printf
看到其输出是一个终端窗口时,它会将输出视为行缓冲,并且在被告知输出换行之前不会输出任何内容(\n
)性格fflush
将输出其缓冲区中当前的任何内容。因此,您可能会看到一些交错,这取决于系统上运行的其他内容。希望有人能根据典型的Linux调度器所做的工作来解释这个顺序。谢谢你的帮助!了解了“fflush”。
6 7 8 9 10
1 2 3 4 5