进程与fork

进程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

四要素

  • 要有一jin段程序供该进程执行
  • 进程专用的堆栈空间
  • 进程控制块,在linux中具体实现为task_struck结构
  • 有独立的存储空间

三类型

  • 交互进程 : 由shell 启动的进程,可以在前台运行,也可以在后台运行
  • 批处理进程: 这种进程和终端没有联系,是一个进程序列
  • 监控进程: Linux 系统启动时启动的进程,并在后台运行

区分

进程与程序

作业与进程

作业和进程都是在操作系统执行的程序,但作业不是程序。

一个正在执行的进程称为一个作业,而作业可以包含一个或多个进程

作业控制:控制正在运行的进程的行为。

进程+作业控制 = 作业

进程与线程

fork

要创建一个进程,系统调用fork派生一个进程。

源进程称为父进程,派生出来的进程称为子进程

子进程是父进程的拷贝,子进程从父进程获取数据段和堆栈段的拷贝

创建成功父进程返回 新子进程pid ,子进程返回 0;失败 返回 -1

fork执行后执行父进程还是子进程不确定, 由内核使用的调度算法决定

fork使用

示例函数

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main(){
    int pid=1;
    pid=fork();
    if(pid==0){ //pid为0,表示为子进程
        printf("我是子进程, 我的pid是:%d\n", getpid());
    }   
    else if(pid>0){ //pid>0表示父进程,此时返回值为子进程的pid
        printf("我是父进程,我的pid是: %d\n", getpid());
    }   
    else {  //fork 失败
        printf("fork失败");
    }   
}

运行结果

说明: 在执行pid=fork() 前只有一个进程, 执行后就会有两个进程在执行这个程序

posted @ 2022-09-07 23:57  我就一水  阅读(130)  评论(0)    收藏  举报