Linux中fork()函数

一、什么是进程

进程是正在执行的程序实例。执行程序时,内核会将程序代码载入虚拟内存,为程序变量分配空间,在内核中建立相应的数据结构,以记录与进程有关的各种信息(比如,进程ID、用户ID、组ID以及终止状态等)。

简单来说,就是”执行一个程序或命令“就可以出发一个事件而获取一个进程ID。也就是说,程序被触发后,执行者的权限与属性、程序代码与数据等会被加载到内存,操作系统并给予这个内存单元一个标识符(进程ID)。

进程可以使用系统调用fork()来创建一个子进程。子进程获得父进程的数据空间、堆和栈的副本。父进程和子进程并不共享这些存储空间部分,共享正文段,也就是在内存中被标记为只读的程序文本段。例如在Linux shell中键入命令,ps时,shell会创建一个进程,这个子进程执行ps。

kernel@Ubuntu:~/Desktop$ ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  17637  17627  3  80   0 -  6909 wait   pts/1    00:00:00 bash
0 R  1000  17650  17637  0  80   0 -  3554 -      pts/1    00:00:00 ps

二、系统调用fork()

1. fork()函数被调用一次,但有两个返回值。父进程返回新创建的子进程ID,子进程返回0。此时的0不是进程ID为0的进程(ID为0的进程通常是调度进程,是内核的一部分,它并不执行任何磁盘上的进程,被称为系统进程)。

实例:

#include <unistd.h>
#include <sys/types.h>
#include "err.h"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值