【LinuxC】进程(未完)

文章目录

  • 一、进程基础
    • 1.1 定义
    • 1.2 进程分类、关系
      • 1.21 分类
      • 1.22 不同进程之间的关系
    • 1.3 进程描述符和标识符
    • 1.4 进程状态与调度
      • 1.41 进程状态切换
      • 1.42 进程调度
  • 二、进程操作

一、进程基础

1.1 定义

进程(Process)定义:程序执行时的一个实例。(在自身的虚拟地址空间运行的一个单独的程序)

A process is an instance of a computer program that is currently being executed

源代码和生成的可执行程序(elf\exe)存放在硬盘(flash)中,进程位于内存中。

  • 一个可执行程序可以对应多个进程实例,比如多个用户登录同一台Linux,都打开vim,此时就存在多个对应同一个可执行程序的独立进程。
  • 一个可执行程序也可以启动多个进程(前面是多次启动,这里是一次启动),注意区分多线程,启动的多个进程都有独立的内存。
    【LinuxC】进程(未完)_第1张图片
    进程执行时,操作系统为它在内存中分配一块存储空间,包括该进程对应的代码正文、数据、堆栈(即指令+数据)。如果该进程需要处理(磁盘上的)文件,相应的数据也会在需要的时候加载到内存中(文件缓存)。

1.2 进程分类、关系

1.21 分类

分类方式不唯一。我这里分为三种(守护进程和内核进程也可以统一称为系统进程):

  1. 用户进程(User Processes:系统中的大多数进程都是用户进程。 用户进程是由常规用户帐户启动并在用户空间中运行的进程。 除非以赋予进程特殊权限的方式运行,否则普通用户进程对处理器或系统上不属于启动该进程的用户的文件没有特殊访问权限。

  2. 守护进程(Daemon Process:守护进程是一种设计为在后台运行的应用程序,通常管理某种正在进行的服务。 守护进程可能会监听传入的访问服务的请求。 例如,httpd 守护进程侦听查看网页的请求。 或者,守护进程可能旨在随着时间的推移自行启动活动。 例如,crond 守护进程旨在按预设启动 cron 作业。
    次。

  3. 内核进程(Kernel processes:内核进程仅在内核空间中执行。 它们类似于守护进程。 主要区别在于内核进程可以完全访问内核数据结构,这使得它们更容易比在用户空间中运行的守护进程更强大。内核进程也不像守护进程那样灵活。 你可以通过更改配置文件和重新加载服务来更改守护进程的行为。 然而,更改内核进程可能需要重新编译内核。

常见守护进程(通常名称以d结尾:deamon):

名称 作用 名称 作用
sshd SSH守护进程,用于远程登录和身份验证 httpd (Apache) 用于运行Web服务器的守护进程
mysqld (MySQL) MySQL数据库服务器守护进程 postgresql PostgreSQL数据库服务器守护进程
cupsd 通用Unix打印系统守护进程 named (bind) DNS服务器守护进程
ntpd 网络时间协议守护进程 crond (cron) 定时任务守护进程
syslogd 系统日志守护进程 sendmail/postfix 电子邮件传输代理守护进程
sssd 系统安全服务守护进程 nfsd 网络文件系统(NFS)守护进程
dockerd (Docker) Docker容器守护进程

常见内核进程:

名称 作用 名称 作用
systemd(或init) 初始化系统的第一个用户级进程,负责系统初始化 kthreadd 创建其他内核线程和执行初始化内核任务
kswapd 交换内存管理,管理页面的交换和回收 ksoftirqd 处理软中断任务
kworker 内核工作线程,执行各种内核任务,如I/O、调度、中断处理 rcu_sched 实现数据结构的并发访问
migration 处理CPU任务迁移和负载均衡 kdevtmpfs 管理/dev目录中的设备节点
watchdogd 监视系统的健康状态,并在出现问题时执行操作 kerneloops 记录和报告内核崩溃信息

内核进程通常在系统启动后的早期就运行了:
【LinuxC】进程(未完)_第2张图片



除此之外,为了便于理解,还有这些分类或叫法:

  1. 前台进程(Foreground Process):前台进程是用户当前正在与之交互的进程。通常,图形用户界面(GUI)应用程序的主窗口和用户正在使用的终端会运行在前台进程中。前台进程通常具有用户输入焦点,并响应用户的操作。

  2. 后台进程(Background Process):后台进程是在不干扰用户的前台工作的情况下运行的进程。它们通常用于执行不需要用户交互的任务,如文件传输、数据备份等。

  3. 父进程(Parent Process)和子进程(Child Process):父进程可以创建一个或多个子进程。子进程通常继承了父进程的一些属性和资源,并执行不同的任务。父子关系在进程树中以树状结构表示。

  4. 前端进程(Foreground Process):前端进程是一种与用户界面或用户终端交互的进程。它们通常接受用户输入,并将输出发送到用户终端,例如终端会话或图形用户界面。

  5. 实时进程(Real-time Process):实时进程需要在特定的时间要求内完成任务,通常用于实时控制和嵌入式系统中,例如飞行控制系统、医疗设备等。

  6. 交互式进程(Interactive Process):交互式进程需要快速响应用户的输入,并通常用于用户界面应用程序,如操作系统的图形用户界面、办公软件等。

  7. 批处理进程(Batch Process):批处理进程是一组任务或作业的集合,它们通常在没有用户交互的情况下自动运行。批处理通常用于定期执行一组重复的任务,如数据处理、报告生成等。

  8. 并发进程(Concurrent Process):并发进程是同时运行的多个进程,它们可以共享计算机资源,但通常是独立运行的。并发通常用于多任务操作系统中,以提高资源利用率。

  9. 多线程进程(Multi-threaded Process):多线程进程包含多个线程,这些线程共享相同的内存空间,但独立执行不同的任务。多线程通常用于提高并发性和性能。

1.22 不同进程之间的关系

不同进程之间的关系:

进程关系 描述
父子关系(Parent-Child) 父进程创建并管理子进程,子进程继承父进程的环境和资源。
同级关系(Siblings) 同一父进程创建的多个子进程之间,它们是同级关系,共享同一父进程。
竞争关系(Competition) 进程竞争有限的系统资源,如CPU时间、内存等,可能需要系统调度来协调。
合作关系(Cooperation) 进程通过进程间通信(IPC)合作,以交换数据和信息,实现协同工作。
依赖关系(Dependency) 某些进程依赖其他进程或服务来执行任务,如网络服务依赖数据库服务。
父子依赖关系(Parent-Child Dependency) 子进程可能依赖父进程的存在和资源,如果父进程终止,子进程可能成为孤儿进程。
协调关系(Coordination) 多个进程之间可能需要协调来执行任务,通常使用同步和互斥机制来实现。

此外,根据进程创建的先后,进程之间的关系也可以描述为:

  • 祖先进程:在一个进程树中的顶层进程,也就是没有父进程的进程。在 Unix/Linux 系统中,通常由 systemd充当祖先进程。
  • 父进程 、子进程、兄进程、弟进程。看名字就明白了。

1.3 进程描述符和标识符

1.4 进程状态与调度

进程调度包括:不同进程之间的切换;同一进程的不同状态之间的切换。目的是高效利用系统资源。

1.41 进程状态切换

1.42 进程调度

二、进程操作

你可能感兴趣的:(1024程序员节,C语言,Linux)