目录
- 一.进程的介绍
- 1.引出进程
- 2.进程的介绍
- 二.创建进程
- 1.创建进程的原理
- 2.什么是fork函数
- (1).通过手册查看fork
- 3.例子
一.进程的介绍
1.引出进程
Google Chrome 是一个进程
Google Chrome 底下的选项是多个线程
通过top命令可以查看正在运行的进程
2.进程的介绍
- 课本概念
程序的一个执行实例,正在执行的程序 - 内核观点
担当分派系统资源(CPU 时间, 内存)的实体
二.创建进程
1.创建进程的原理
创建新进程在Linux下是是由父进程完成的,创建完成的新进程是子进程.
新的进程的地址空间有两种可能性:
- 子进程是父进程的复制品(除了PID和task_struct是子进程自己的,其余的都从父进程复制而来)
- 子进程装入另一个程序
在Linux下的fork函数用于创建一个新的进程,使用fork函数来创建一个进程时,子进程只是完全复制父进程的资源。这样得到的子进程和父进程是独立的,具有良好的并发性。但是进程间通信需要专门的机制
2.什么是fork函数
(1).通过手册查看fork
-
NAME
创建一个子程序
-
SYNOPSIS
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
- 函数说明:
通过复制调用进程创建一个新进程:
fork 有两个返回值
父子进程代码共享,数据各自私有一份(采用写时拷贝)
- 返回值说明
如果成功则会给父进程返回子进程的PID,给子进程返回0
如果失败的话则会给父进程返回-1
3.例子
#include <sys/wait.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main(){
pid_t pid=fork();
if(pid==-1)exit(1);
if(pid==0){
printf("fork:%d %d\n",getpid(),getppid());
exit(5);
}else{
printf("main:%d %d\n",getpid(),getppid());
}
return 0;
}
结果