系统调用是什么?

简单来说,系统调用是接口,它把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,再将处理结果返回给应用程序。

fork()是什么?

是创造进程的一种系统调用。

fork返回值为什么有两个?

首先fork的返回值有三种情况

  1. 返回值>0;在父进程中, fork返回新创建子进程的进程ID(进程标识符) ;
  2. 返回值=0;在子进程中, fork返回0 ;
  3. 返回值<0;如果出现错误, fork返回一个负值;

其次为什么有两个呢,是因为在执行代码:“pid = fork();”时,同时产生了一个子进程,与当前C程序完全一样的子进程,当然了,子进程中的代码段不再执行“pid = fork();”这一行了,所以这也就是为什么有两个返回值了,因为父进程和子进程各有一个返回值赋值给pid,

父进程pid=子进程的ID,

子进程pid=0,

蓝色部分就是两个返回值的形式。

​#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>int main()
{pid_t pid;    //pid_t是一个typedef定义类型。 用它来表示进程id类型pid = fork();    //创建子进程if(pid<0)        //创建失败{printf("Fork Failed");}else if(pid == 0)    //创建成功,此时在子进程中{printf("爸爸!的id:%d\n",getppid()); printf("儿子!的id:%d\n",getpid());        //getpid()返回值,输出当前进程ID,也就是刚被创建的子进程的ID。}else //创建成功,此时在父进程中{printf("儿子的id:%d\n",wait(NULL));    //清除子进程,并输出刚被创建的子进程IDprintf("爸爸的id:%d\n",getpid());    //输出父进程的IDprintf("爷爷的id:%d\n",getppid());    //输出父进程的父进程ID}     return 0;
}[点击并拖拽以移动]
​

进程标识符是什么?

进程标识符是每个进程的身份证号。

int getpid();     //取得当前进程的标识符。
int getppid();    //取得当前进程的父进程标识符。

exec()函数族有啥用?

它们的作用是:当fork()创建了一个子进程时,exec()为子进程加载新的进程映像。简单来说,就是瓶子不换,把水换掉。整瓶水是进程,水是要执行的文件。

wait函数有什么用?

  1. 进程一旦调用了wait() ,就立即阻塞自己,由wait()自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸态的子进程, wait ()就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程, wait ()就会一直阻塞在这里,直到有一个出现为止。
  2. wait()要与fork()配套出现,如果在使用fork()之前调用wait() ,wait()的返回值则为-1,正常情况下wait()的返回值为子进程的PID。
  3. 当父进程没有使用wait()函数等待已终止的子进程时﹐子进程就会进入一种无父进程清理自己尸体的状态,此时的子进程就是僵尸进程,不能在内核中清理尸体的情况
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>int main()
{pid_t pid;    //pid_t是一个typedef定义类型。 用它来表示进程id类型pid = fork();    //创建子进程if(pid<0)        //创建失败{printf("Fork Failed");}else if(pid == 0)    //创建成功,此时在子进程中{printf("爸爸!的id:%d\n",getppid()); printf("儿子!的id:%d\n",getpid());        //getpid()返回值,输出当前进程ID,也就是刚被创建的子进程的ID。}else //创建成功,此时在父进程中{printf("儿子的id:%d\n",wait(NULL));    //清除子进程,并输出刚被创建的子进程IDprintf("爸爸的id:%d\n",getpid());    //输出父进程的IDprintf("爷爷的id:%d\n",getppid());    //输出父进程的父进程ID}     return 0;
}

注意:

删除wait行代码后,输出的顺序会有所改变。

编写一个C 程序,并使用系统调用fork()创建一个子进程相关推荐

  1. 试编写一个汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数

    试编写一个汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数 data segment data ends stack segment stack dw 30h dup ...

  2. python程序启动其他python程序_python中使用fork创建新的进程

    python中如果要创建新进程的话,可以使用os模块中的fork方法.为了了解其中工作原理,笔者结合linux的查看进程ps命令,对这个方法做了一些测试. python运行时进程 python一开始运 ...

  3. 手把手做一个JSP入门程序(二):创建一个项目(JSP)

    创建一个项目 我们使用Eclipse和Web服务器的Tomcat进行开发.Eclipse我们需要用"Eclipse IDE for Java EE Developers"(Ecli ...

  4. python用一行代码编写一个回声程序_Python源码分析2 - 一个简单的Python程序的执行...

    本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构. 要执行Python程序如下,功能非常简单:从1加到10再打印出来 # test program sum ...

  5. 用java编写一个聊天程序_基于JAVA实现的一个简单的网络聊天程序

    一.Java Socket的概述 1.Socket套接字方便了开发网络应用程序.TCP面向连接的可靠传输协议.具有数据确认和数据重传机制.保证了发送数据一定能到达通信的对方.UPD协议无连接,不可靠的 ...

  6. 第一章第一个c#程序上机_我从第一个#100DaysOfCode中学到的东西

    第一章第一个c#程序上机 On May 17th, I completed my first round of #100DaysOfCode. In case you haven't heard, # ...

  7. python如何运行一个python程序_python如何运行?第一个python小程序示范

    我们想要用python编程首先要做的就是安装一些工具,随后学会应用.那么问题来了,我们需要安装什么?python又是怎样运行的呢? 安装什么工具? 1.Python 3.6.5(我安装的,还有很多版本 ...

  8. 第一个java程序书_Java入门(4) 第一个Java程序

    Java入门(4) 第一个Java程序 摘要 通过本章的学习,读者应了解Java语言的两种程序:应用程序.小应用程序的基本结构,能够编译.运行Java应用程序和小应用程序. (2002-09-16 1 ...

  9. C(第一个C程序) 和 C++ (第一个C++程序)对比碰撞

    个人博客首页(点击查看详情) -- https://blog.51cto.com/11495268 1.简介 C++ 是对 C 的继承.扩展,但从语言角度来说,这是 两种变成语言,就一定存在不同,本文 ...

最新文章

  1. Python自学路线图之Python进阶
  2. 机器人时代的资本主义:21世纪的工作,收入和财富
  3. 《Hadoop技术详解》一导读
  4. 在Windows下安装配置OpenCV-Python-PyCharm开发环境
  5. Linux下判断cpu物理个数、几核
  6. 这本造价500万的“黑科技”日历,用377张爆美插画给你365天理想生活
  7. GoogLeNet的心路历程(二)
  8. 软件_搭建rtsp视频推送环境
  9. classmethod作用
  10. 线性调频信号(LFM)时域与频域分析
  11. Unity UI框架思路与实现
  12. 全球链界科技发展大会_科技界的女性-过去,现在和未来
  13. Python通过哈希算法实现文件完整性校验-以及大型文件完整性校验
  14. python导入mysqldb_Python导入MySQLdb
  15. AndroidEventBus(事件总线)了解+实战体验
  16. 【翻译】Sencha Touch 2入门:创建一个实用的天气应用程序之三
  17. 【Wordle】Day9:诶嘿,今天没忘
  18. JavaScript和jQuery实战手册(原书第2版)
  19. 解决前端组件渲染没更新数据问题
  20. 爬虫遇到合并单元格(爬虫快速处理网页表格)

热门文章

  1. Not live in vain——Leo关于生与死的感悟
  2. 狗年说狗--忠诚的卫士
  3. Hive窗口函数 row_number over()和sum() over()的使用详解
  4. 大数据学习笔记-------------------(17_3)
  5. 为了给YiYi节省时间,写了个能自动拼图贴水印的机器人,很多bug,能用就行。...
  6. 论 $*、$@、$*、$@的区别
  7. EK1100和EK1110简介
  8. 专访图麟科技联合创始人张勋:AI商用化时代,图麟科技率先抢占工业赛道
  9. 论文投稿指南——SCI投稿各阶段邮件模板
  10. DHCP服务器是什么?