Linux环境 fork() 解析
来源:互联网 发布:数据分析与数据挖掘 编辑:程序博客网 时间:2024/05/01 23:17
一 基础知识
一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程
fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;
实例:
/************************************************************************* > File Name: fork_test.c > Author: > Mail: > Created Time: 2016年06月06日 星期一 09时29分05秒 ************************************************************************/#include <unistd.h> #include <stdio.h> int main () { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) printf("error in fork!"); else if (fpid == 0) { printf("child process| process id= %d | fpid= %d |parentid = %d \n",getpid(),fpid,getppid()); count++; } else { printf("parent process| process id= %d | fpid = %d |parentid = %d\n",getpid(),fpid,getppid()); count++; } printf("统计结果是: %d \n",count); getchar(); return 0; }
fork出错可能有两种原因:
1)当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。
2)系统内存不足,这时errno的值被设置为ENOMEM。
二、fork进阶知识
实例
#include <unistd.h> #include <stdio.h> int main(void) { int i=0; printf("i son/pa ppid pid fpid \n"); //ppid指当前进程的父进程pid //pid指当前进程的pid, //fpid指fork返回给当前进程的值 for(i=0;i<2;i++){ pid_t fpid=fork(); if(fpid==0) printf("i=%d | child ppid=%4d |pid=%4d |fpid=%4d \n",i,getppid(),getpid(),fpid); else printf("i=%d | parent ppid=%4d |pid=%4d |fpid=%4d \n",i,getppid(),getpid(),fpid); } getchar(); return 0; }
运行结果
查看进程
分析
0 0
- Linux环境 fork() 解析
- linux fork 函数解析
- linux源码解析-fork
- linux环境编程之 fork() || fork()
- linux fork()函数的解析
- Linux fork炸弹解析 ——Linux Fork Bomb
- 【linux】fork() && fork() || fork()
- linux下fork的运行机制详细解析
- LINUX下FORK的运行机制详细解析
- linux中fork()函数解析
- 深入解析Linux中的fork函数
- LINUX下FORK的运行机制详细解析
- linux下fork的运行机制解析
- fork解析
- linux bash Shell脚本经典之Fork炸弹解析:() { :|:& };:
- 操作系统(Linux)---fork()函数解析与进程
- linux中建立新的进程-fork、vfork、clone解析
- linux fork()
- [leetcode] 300. Longest Increasing Subsequence
- jsp动作元素:<jsp:forward>动作元素
- HDU 1492 The number of divisors(约数) about Humble Numbers
- angularjs 表单验证
- 下拉菜单是表现还是行为
- Linux环境 fork() 解析
- js读取cookie
- svn: Commit failed: already exists
- oracle建表自增主键
- UVA 10780 (唯一分解)
- (三)第三章:大数据——详解IT界“多租户”。
- PHP-表单
- 如何创建Android Studio工程的git本地仓库——初级篇
- SQL truncate 、delete与drop区别