fork()函数


目标:熟悉fork创建一个和多个子进程子线程

函数原型:pid_t fork(void);

返回值:成功返回:① 父进程返回子进程的ID(非负) ②子进程返回 0 ;

    失败返回-1。

注意:pid_t类型表示进程ID,它是有符号整型。

例程一:创建一个子线程

 #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
pid = fork();//创建子进程
//调用出错
if(pid == -){
printf("fork failed\n");
return ;
}
else if(pid){ //返回值大于0,为父进程
printf("The father return value is %d\n",pid);
printf("The father pid is %d\n",getpid());
printf("The father ppid is %d\n",getppid());
sleep();
}
else{ //返回值等于0,为子进程
printf("The child return value is %d\n",pid);
printf("The child pid is %d\n",getpid());
printf("The child ppid is %d\n",getppid());
}
return ;
}

编译执行结果:

例程二:循环创建多个子线程

 #include <stdio.h>
#include <stdlib.h>
#include <unistd.h> int main(void)
{
int i;
pid_t pid;
for (i = ; i < ; i++) {
pid = fork();
if (pid == ) { //若为子进程则直接break退出
break;
}
} if (i < ) { //子进程部分
sleep(i);
printf("I'am %d child , pid = %u\n", i+, getpid()); } else { //父进程
sleep(i);
printf("I'm parent\n");
}
return ;
}

编译执行结果:

其中,getpid()函数: 获取当前进程ID,原型为pid_t getpid(void);

   getppid()函数:获取当前进程的父进程ID,原型为pid_t getppid(void);

2.1 进程控制之fork创建子进程的更多相关文章

  1. 进程控制之fork函数

    一个现有进程可以调用fork函数创建一个新进程. #include <unistd.h> pid_t fork( void ); 返回值:子进程中返回0,父进程中返回子进程ID,出错返回- ...

  2. 利用fork创建子进程

    创建如图的进程: #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<wait. ...

  3. Linux fork创建子进程

    1.  pid_t fork(void); 功能:创建父子进程 参数:无 返回值:成功:在父进程中:返回值为子进程的PID 在子进程中:返回值为0 失败:-1 注意: 1)fork函数是用来创建进程的 ...

  4. 线程_互斥锁_Lock及fork创建子进程

    """ 创建锁 mutex = threading.Lock() 锁定 mutex.acquire([blocking]) 当blocking为True时,当前线程会阻塞 ...

  5. Linux下利用fork()创建子进程并使父进程等待子进程结束

    int status; pid_t t = fork(); if(t){     waitpid(t, &status, 0); }else{     system("vi temp ...

  6. fork()创建子进程

    fork()系统调用是Unix下以自身进程创建子进程的系统调用,一次调用,两次返回,如果返回是0,则是子进程,如果返回值>0,则是父进程(返回值是子进程的pid) 在fork()的调用处,整个父 ...

  7. Python 使用 os.fork() 创建子进程

    Linux 操作系统提供了一个 fork() 函数用来创建子进程,这个函数很特殊,调用一次,返回两次,因为操作系统是将当前的进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回.子进程永 ...

  8. linux系统调用之进程控制

    1 进程控制: fork                                                                                     创建一 ...

  9. linux c编程:进程控制(四)进程关系

    每一个进程除了有一个进程ID外,还属于一个进程组.  进程组是一个或多个进程的集合,通常情况下,他们是在同一作业中结合起来的,同一进程组的个进程接受来自同一终端的各种信号. 每一个进程组有一个唯一的进 ...

随机推荐

  1. Vue2自定义指令改变DOM值后未刷新data中绑定属性的值

    标签(空格分隔): Vue 自定义指令用于过滤输入框,只允许输入数字: Vue.directive('numberOnly', { bind: function (el, binding) { el. ...

  2. 再学UML-Bug管理系统UML2.0建模实例(四)

    3.3 顺序图(实现模型) 在系统设计与实现阶段我们也可以使用顺序图进行建模,此时通过顺序图可以明确表示系统设计中对象之间的交互,考虑到具体系统实现,对象之间通过方法调用传递消息.在BMS系统中,对每 ...

  3. vue + element-ui 制作tab切换(适用于单页切换不同标记显示不同内容)

    本篇文章使用vue结合element开发tab切换单页不同的标记显示不同的内容. 1.安装element-ui npm install element-ui --save 2.在main.js中引入e ...

  4. JS interview loop code

    //九九乘法表 document.write("<table width='600' border=0'>"); for(var i=1; i<=9; i++){ ...

  5. File not Found:DockForm.dcu的解决办法

    安装控件时,如果引用了dsgnintf单元,那么就会提示找不到proxy.pas 或者DockForm.dcu的错误,只需在安装控件包时添加“lib\DesignIde.dcp”即可

  6. 二、Python安装扩展库

    第一步:推荐easy_install工具 下载地址:https://pypi.python.org/pypi/setuptools 下载"ez_setup.py"文件; 通过运行c ...

  7. hdu1852 Beijing 2008

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1852 题目大意: 求2008^n的所有因子和m对k取余,然后求2008^m对k取余. 解题思路: 首 ...

  8. Android(java)学习笔记47:通过反射获得构造方法并且使用

    1. 获取字节码文件对象:             Class c = Class.forName("cn.itcast_01.Person"); 2. 获取构造方法       ...

  9. Softmax实现 fashion.mnist 分类

    softmax #!/usr/bin/env python # coding: utf-8 # In[1]: get_ipython().run_line_magic('matplotlib', 'i ...

  10. 效率对比:各种语言构造100W个时间对象

    原本是用perl写了一个通过给定的时间范围来筛选一个比较大的日志文件.但是测试发现筛选130W行日志需要2分多钟,对其中几个低效率函数单独进行了效率测试,发现构造100W个时间对象所花时间也是个大户. ...