centos下运行编译c程序的整体过程(以fork下父子进程调用问题为例)

先说几个关键命令:

  1. yum -y install XXX //XXX命令找不到,直接用
  2. gcc XXX.c -o XXX //gcc编译程序
  3. ./XXX //运行编译文件
  4. man [方法名] //比如不懂fork函数,直接 man fork 就有完整解释
    第一步:创建目录及相应源程序文件
    mkdir 和 touch 不用过多解释
    第二部:编写程序
    vim fork.c
    打开文件后按 a 开始编写,之后按 esc, 输入 :x 或者 :x!(修改程序时用) 保存并 ctrl+z 退出文件。
    然后, 编译
    gcc fork.c -o fork
    最后运行
    ./fork

下面是fork 父子进程的执行顺序问题

#include <unistd.h>
int main(){
int i;
if( fork() == 0 )
{
for( i = 1 ; i <10 ;i++)
printf(“我是子进程%d\n”,getpid());
}
else
{
for( i = 1 ; i <10 ; i++){
printf(“我是父进程%d\n”,getpid());
//sleep(3);
}
}
}

结果是

[root@localhost c]# ./fork
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是父进程2176
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177
我是子进程2177

不是应该父子进程交替输出么?

把sleep(3)的注释去掉
结果为

[root@localhost c]# ./fork
我是父进程2192
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是子进程2193
我是父进程2192
我是父进程2192
我是父进程2192
我是父进程2192
我是父进程2192
我是父进程2192
我是父进程2192
我是父进程2192

可以看到父进程执行到中间由于sleep了3秒,转去执行子进程了。

看了几篇文章,说是系统对进程的调度问题。

我的猜测:父子进程应该是执行完一个在搞另一个,父进程中生成子进程后,子进程排队等着父进程结束再进行,然而父进程sleep 3s,这时系统会让子进程先来运行,等父进程醒过来也只能等子进程结束后才能执行了。

猜你喜欢

转载自blog.csdn.net/wzl_lzw/article/details/83304055