当前位置: 首页 > news >正文

linux下进程详解

在 Linux 系统中,进程是计算机执行程序的基本单位。理解进程的概念和管理方法对系统管理员和开发者都非常重要。下面是对 Linux 下进程的详细介绍:

  1. 进程的基本概念
    进程:进程是程序在计算机上执行的一个实例。每个进程都有自己独立的内存空间和资源。

进程状态:一个进程可以处于以下几种状态之一:

运行(Running):进程正在使用 CPU 执行指令。
就绪(Ready):进程准备好执行,但等待 CPU 时间片。
等待(Waiting):进程等待某个事件或资源(如 I/O 操作)完成。
终止(Terminated):进程执行完成或被终止,进入了退出状态。
2. 进程相关概念
进程 ID (PID):每个进程在系统中都有一个唯一的进程 ID,用于标识和管理进程。

父进程(Parent Process):创建当前进程的进程称为父进程。

子进程(Child Process):由当前进程创建的进程称为子进程。

僵尸进程(Zombie Process):已经完成执行,但其父进程尚未读取其退出状态的进程。

孤儿进程(Orphan Process):其父进程已经终止,但其子进程仍在运行的进程。孤儿进程会被 init 进程(进程 ID 为 1)接管。

  1. 进程管理命令
    ps:

显示当前系统的进程列表。常用选项包括:
ps aux:显示所有用户的所有进程。
ps -ef:另一种显示所有进程的方式。
top:

实时显示系统中各个进程的资源使用情况,包括 CPU 和内存占用。
htop:

top 命令的增强版,提供图形化的界面,支持更丰富的交互操作。
pstree:

显示进程树,显示进程之间的层级关系。
kill:

发送信号给进程。常用来终止进程:
kill PID:发送 SIGTERM 信号,要求进程正常终止。
kill -9 PID:发送 SIGKILL 信号,强制终止进程。
killall:

通过进程名称发送信号。常用来终止同名的所有进程:
killall processname:发送 SIGTERM 信号给所有名为 processname 的进程。
killall -9 processname:发送 SIGKILL 信号。
pkill:

根据进程名称或其他属性发送信号:
pkill processname:发送 SIGTERM 信号给所有匹配 processname 的进程。
pkill -9 processname:发送 SIGKILL 信号。
4. 进程的创建和终止
进程创建:

fork():系统调用,用于创建一个新进程(子进程)。子进程是父进程的副本。
exec():用于替换当前进程的映像。通常与 fork() 一起使用,fork() 创建子进程,exec() 执行新程序。
clone():用于创建一个新进程或线程,提供更细粒度的控制,通常用于实现线程库。
进程终止:

exit():进程调用 exit() 函数终止自己。
abort():进程调用 abort() 函数异常终止。
信号:父进程可以通过发送信号来终止子进程。
5. 进程优先级
优先级:
进程的优先级影响其调度顺序。高优先级的进程会优先获得 CPU 时间。
nice:启动进程时设置其优先级。范围从 -20(高优先级)到 19(低优先级)。
renice:修改运行中进程的优先级。
6. 进程间通信(IPC)
管道(Pipes):用于在进程之间传递数据。

无名管道:用于父子进程或兄弟进程之间的通信。
有名管道(FIFO):可以用于无关进程之间的通信。
消息队列:用于在进程之间交换消息。

共享内存:多个进程可以访问同一块内存区域,以实现高速数据交换。

信号量:用于进程间的同步和互斥。

套接字(Sockets):支持网络通信,也可用于本地进程间通信。

  1. 进程调度
    调度算法:
    轮转调度(Round-Robin):将 CPU 时间片轮流分配给所有进程。
    优先级调度:根据进程的优先级进行调度。
    多级反馈队列:结合多种调度策略以提高系统效率。
http://www.lryc.cn/news/436541.html

相关文章:

  • 春招审核流程优化:Spring Boot系统设计
  • QT:音视频播放器
  • 大模型入门 ch 03:注意力机制
  • STM32点亮第一个LED
  • [Linux]:动静态库
  • windows 显示进程地址空间
  • Android 12 SystemUI下拉状态栏禁止QuickQSPanel展开
  • 二分思想与相关问题(下)
  • 【算法专题】搜索算法
  • B2064 斐波那契数列
  • Spark的介绍
  • SpringBoot项目是如何启动
  • 科技之光,照亮未来之路“2024南京国际人工智能展会”
  • 在深度学习计算机视觉的语义分割中,Boundary和Edge的区别是?
  • 【JAVA入门】Day41 - 字节缓冲流和字符缓冲流
  • collocate join,bucket join,broadcast join,shuffle join对比分析
  • 微信自动通过好友和自动拉人进群,微加机器人这个功能太好用了
  • R语言统计分析——功效分析3(相关、线性模型)
  • Django创建模型
  • 盘点2024年大家都在用的短视频剪辑工具
  • “左侧文字横向”的QTabWidget
  • python学习之字符串操作
  • 第7篇:【系统分析师】计算机网络
  • 无人机培训机构组装调试技术详解
  • ‌汽车的舒适进入功能是什么意思?
  • 杂七杂八-系统环境安装
  • Redis高可用,Redis性能管理
  • React项目中使用发布订阅模式
  • buck boost Ldo 经典模型的默写
  • velero v1.14.1迁移kubernetes集群