天嵌 ARM开发社区

 找回密码
 注册
查看: 2244|回复: 3

问一个很基础的子进程创建执行顺序问题

[复制链接]
andy-lang 发表于 2010-4-28 12:34:02 | 显示全部楼层 |阅读模式
/*fork.c*/
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
pid_t result;
/*调用fork函数,其返回值为result*/
result = fork();
/*通过result的值来判断fork函数的返回情况,首先进行出错处理*/
if(result == &#61485;1){
perror("fork");
exit;
}
/*返回值为0代表子进程*/
else if(result == 0){
printf("The return value is %d\nIn child process!!\nMy PID is %d\n",result,getpid());
}
/*返回值大于0代表父进程*/
else
{
printf("The return value is %d\nIn father process!!\nMy PID is
%d\n",result,getpid());
}
}
问题:
1、这里的result是局部变量吧?这里为什么在else if完了之后又会去执行else里面的内容呢?是因为执行else if了之后result值发生了变化吗?要是这样,是什么时候又重新给result赋值了呢?
2、这里:
else if(result == 0){
//该括号内执行的语句都是在子进程里面执行的吗?
}
Else{
//该括号内执行的语句都是在父进程里面执行的吗?
}
 楼主| andy-lang 发表于 2010-4-29 09:13:28 | 显示全部楼层
怎么没有人回复下?这个没搞懂,其他程序都么法看了,希望大家帮我把上面的这段程序解释下,谢谢!
 楼主| andy-lang 发表于 2010-4-29 09:21:43 | 显示全部楼层
对于第二个问题,我可以理解成:
else if(result == 0){
//该括号内执行的语句都是在子进程里面将要执行的语句
}
Else{
//该括号内执行的语句都是在父进程里面将要执行的语句
}
但是,因为时间片的转换,两个进程的内容是同时进行的对吧?
亚瑟王 发表于 2010-5-8 20:15:00 | 显示全部楼层
整个程序是顺序的,result只赋值了一次。result = fork();然后后面判断result的值,result == &#61485;1不满足就接着判断result == 0,还不满足就执行最后一个else里面的内容。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-6-18 23:12 , Processed in 1.062500 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表