1.进程标识符

①pid,通常是一个有符号的,16位的一个整形数
我在centos下测试了 是占四个字节
②类型pid_t
③文件描述符优先使用最小的,但是进程描述符是一次使用最小的,就算前面有释放的,也不会使用
④两个函数getpid和getppid

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>int main()
{printf("MyPid = %d\n", getpid());printf("Father Pid = %d\n", getppid());printf("SIZE = %d\n", sizeof(pid_t));return 0;
}

2.fork

NAMEfork - create a child processSYNOPSIS#include <unistd.h>pid_t fork(void);DESCRIPTIONfork()  creates  a  new  process  by  duplicating  the  calling process.

①通过复制父进程来创造一个新的进程,注意是连执行到的位置都一模一样,类似于memory copy,当然这么理解有些牵强

except for the following points

①首先fork的返回值不同
②父子进程的pid不同,ppid也不同
③子进程不继承父进程设置的文件锁
④子进程的未处理闹钟被清除
⑤子进程的未处理信号集变成空集
fork的返回值
①当创建子进程失败的时候,会返回-1
②当创建子进程成功的时候,子进程会接收到返回值0,父进程会接收到返回值是子进程的pid号
一个demo

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main()
{int pid;printf("[%d]: Begin\n", getpid());pid = fork();if(pid < 0){perror("fork()");exit(1);}if(0 == pid){printf("[%d]: Child Working\n", getpid());}else{printf("[%d]: Father Working\n", getpid());}printf("[%d]: End\n", getpid());return 0;
}

3.init进程是所有进程的祖先进程

4.永远不要凭空猜测父子进程谁先被调度

5.一个需要注意的问题

还是刚才那个程序,我们对其进行重定向,发现为什么会被打印两次呢?

没有刷新缓冲,你在输出到终端的时候,终端是行缓冲,所以只打印了一次
fflush(NULL)

6.

①当父进程死了,子进程还在,那么子进程会变成孤儿进程,会被init进程接管
②当子进程死了,父进程还在运行,那么子进程会变成僵尸进程

进程标识符及fork相关推荐

  1. linux进程管理fork,Linux -- 进程管理之 fork() 函数

    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. Test1 f ...

  2. 12 [虚拟化] 进程抽象;fork,execve,exit

    12 [虚拟化] 进程抽象:fork,execve,exit 南京大学操作系统课蒋炎岩老师网络课程笔记. 视频:https://www.bilibili.com/video/BV1N741177F5? ...

  3. c语言fork函数fpid初始值,进程创建,fork()函数讲解

    一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也 就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同 ...

  4. 进程创建与fork()的恩怨情仇

    一.述说进程: 1.进程(process)是个什么? 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being execut ...

  5. 进程入门之fork、getpid

    1.进程的基本概念: 问:什么是程序,什么是进程,区别是什么? 答:程序是静态概念,比如gcc test1.c -o a.out,那么a.out就是程序   进程是动态概念,就是程序运行起来后,系统中 ...

  6. 进程创建函数fork()和vfork()

    Linux下使用fork()创建一个新的进程,该函数不需要参数,返回值是一个进程id.对于不同的对象,分别是:新建的子进程id(返回给父进程),0(返回给创建的子进程)或者-1(子进程创建失败,返回给 ...

  7. UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习

    在"进程控制三部曲"中,我们学习到了 fork 是三部曲的第一部,用于创建一个新进程.但是关于 fork 的更深入的一些的东西我们还没有涉及到,例如,fork 创建的新进程与调用进 ...

  8. Linux系统编程之进程控制(进程创建,fork函数,进程中止,进程等待,程序替换)

    进程创建 fork()------复制,返回值,写时复制 vfork()创建子进程-子进程与父进程共用同一块虚拟地址空间, 为了防止调用栈混乱,因此阻塞父进程直到子进程调用exit()退出或者进行程序 ...

  9. 进程的创建-fork(python版)

    进程的创建-fork 1. 进程 VS 程序 编写完毕的代码,在没有运行的时候,称之为程序 正在运行着的代码,就成为进程 进程,除了包含代码以外,还有需要运行的环境等,所以和程序是有区别的 2. fo ...

  10. 浅显理解*nix下的守护进程机制及fork函数

    最近空闲时间重新仔细看了一下memcached的使用说明文档,硬着头皮看了一点源码,有时候看到一些晦涩的c函数感觉实在恍惚只能跳过.不过也不算是全无收获,终于LZ还敢再看c语言,终于LZ又看起了c语言 ...

最新文章

  1. python跟java-Python和Java该学哪个?还在纠结的你看过来呀~
  2. oracle事务处理 自动提交
  3. 冻结拆分_还不会固定表头?速来围观Excel冻结窗格实战教程
  4. [算法]不用第三个数交换2个数的位置
  5. 可视化编码_编码:可视化位图
  6. JDK 8中的Oracle Drops Collection文字
  7. 搭建 ELK 问题排查
  8. hdu 杭电题目分类
  9. mysql数据库BigInt数据类型和实体对象中BigInteger,Long类型的冲突
  10. python 列表 remove()函数使用详解
  11. 转--计算几何常用算法概览
  12. mysql 联合查询去重复_两个表联合查询去重复GROUP_CONCAT
  13. php主动防御,汽车主动防御系统
  14. 【小项目】STM32环境监测 | MQ2可燃气体传感器+雨滴传感器+DHT11温湿度传感器+OLED屏幕
  15. 偏微分方程数值解的matlab程序,偏微分方程数值解法的MATLAB源码
  16. oracle唯一索引
  17. 审计工作存在的难点和问题_浅谈审计整改工作存在的困难及对策
  18. python数据分析师前景及待遇怎么样_数据分析师未来五年发展前景怎么样?
  19. 完整版:交换机工作过程和原理
  20. 布隆过滤器之误识别率FPP公式的推导

热门文章

  1. cmd 查看端口占用情况,及对应进程,杀进程
  2. redis实现分页排序
  3. rocketmq概念
  4. 多线程 + java nio 实现按行读取并处理超大文件
  5. 光谷码农·每日新闻(2019-05-09)
  6. docker下nginx反向代理和负载均衡配置
  7. android开发学习 ------- android studio 同时用svn和git 进行代码管理 出现的问题
  8. jQuery获取鼠标事件源(万能)
  9. 性能测试学习线路图(建议)
  10. 应用chroot构建最小运行系统