linuxc fork函数简单介绍
来源:互联网 发布:手机淘宝缓存文件在哪 编辑:程序博客网 时间:2024/05/21 05:17
Fork函数详解
Fork函数主要是用于子进程的建立,在c的#include<unistd.h>中。下面以一个程序为例子说明fork函数的简单应用。
/*
* fork.c
*
* Created on: 2014-12-2
* Author: Administrator
*/
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(int argc,char *argv[]) {
printf("getpid:%d--------------\n",getpid());
pid_t pid=0;
pid=fork();
if(pid<0)
{
printf("opps,create fork error\n");
}
else if (pid ==0)
{
printf("yeah,i am son\n");
printf("son,pid:%d\n",getpid());
printf("in songetppid() :%d\n",getppid());
int i=0;
int sum =0;
for(i;i<1000;i++)
{
sum+=i;
}
printf("sum=%d\n",sum);
}
else
{
printf("i am dad\n");
printf("ret_id:%d\n",pid);
printf("father:pid:%d\n",getpid());
printf("in fathergetppid() :%d\n",getppid());
}
return 0;
}
printf("getpid:%d--------------\n",getpid());
此句话为了打印main函数所开的进程的进程id,getpid()函数可获得当天进程的id,同时返回进程id号
pid=fork();
fork()是分出一个子进程,进程在出现fork的时候,就开始复制主进程的一个副本,注意这里的复制时从fork开始,所以上一句printf是只会打印一次。Fork返回三个值就是负数,0,以及正数。如果是负数表明因为某种原因没办法创建子进程,0当天正在执行后面的代码的进程是子进程,因为fork如果创建了子进程这里的返回值就是子进程号,这里是0所以没有子进程的号,索命此时进程就是子进程。所以正数也很容易理解,就是说明后面的就是父进程在执行后面的代码段。如果创建成功的话,会执行两次分别是0的父进程以及非0的子进程。
else if (pid ==0)
通过pid==0可以判定子进程的时候就要进入if,在getpid和getppid,分别得出的应该是当天子进程的ID(这个可以再进入主进程的时候验证)和父进程的ID也就是第一句printf的ID。
Else
表明此时是父进程在使用CPU的时间片,在这里有几个打印语句来验证
printf("i am dad\n");
表明我进入了父进程
printf("ret_id:%d\n",pid);
printf("father:pid:%d\n",getpid());
printf("in fathergetppid() :%d\n",getppid());
第一句为了验证fork是否返回的是子进程号可以与上面的子进程的ID做对比
第二句获取主进程的ID,校验是否一致
第三句是主进程的父进程是啥,我返回的是1不知道啥意思。现在知道了,1是系统的init进程所以理论来说所有的应用程序的父进程就是ID=1的init进程
这是我的结果:
getpid:11624--------------
yeah,i am son
son,pid:11688
in songetppid() :11624
sum=499500
getpid:11624--------------
i amdad
ret_id:11688
father:pid:11624
in fathergetppid() :1
这是fork的简单实用,但是如果我使用一个for循环来建立多个子进程,此时会出现多少个子进程呢,以及他们对应的意思?
- linuxc fork函数简单介绍
- fork和vfork函数介绍
- fork()函数的简单程序
- 简单LinuxC程序关于进制转换(递归函数)
- 嵌入式linuxC函数整理
- linuxC stat函数随记
- linuxc时间函数
- LinuxC select函数详解
- linuxC函数之exec
- LinuxC时间函数简介
- linuxC编程--函数
- fork函数的介绍和使用
- 简单LinuxC程序关于简单计算器(函数指针与回调函数)
- LinuxC学习之函数指针与指针函数的简单区分与应用
- fork与fork函数
- LinuxC中的setitimer()函数用法
- Linuxc
- linuxc
- DecimalFormat用法
- 保存别人的解锁的方法
- Linux下iptables防火墙已停的解决办法
- 继续分享shell 之变量使用
- 原型模式
- linuxc fork函数简单介绍
- 获取视图所在的控制器
- 问题整理
- mysqlslap工具测试mysql DB的性能
- java 百度 登录
- Optimizations On Mobile[Unity]
- 第15周项目2-(2)
- Mysql高负载排查思路
- 修改sublime快捷键与eclipse一样