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

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.kler.cn/a/300778.html

相关文章:

  • el-timeline时间线(Plus)左边图标改为自定义图片
  • C++:工具VSCode的编译和调试文件内容:
  • 深度学习图像算法中的网络架构:Backbone、Neck 和 Head 详解
  • SpringBoot集成Mqtt服务实现消费发布和接收消费
  • Rust 强制类型转换和动态指针类型的转换
  • 本地部署Web-Check网站检测与分析利器并实现远程访问实时监测
  • 【超简单】1分钟解决ppt全文字体一键设置
  • Linux用户和组群账户管理
  • 一文读懂:如何将广告融入大型语言模型(LLM)输出
  • java-在ANTLR中BaseListner的方法和词法规则的关系0.5.0
  • 【Go】Go语言中的基本数据类型与类型转换
  • 大白话!解析大模型原理!
  • 系统设计文档示例
  • 正版软件 | Sticky Password 终身密码管理器 - 使用教程分享
  • Flask 第四课 -- 基本概念
  • Weakly-Supervised Video Moment Retrieval via Semantic Completion Network 论文阅读
  • 【Django】Django AI 聊天机器人项目:基于 ChatGPT 的 Django REST API
  • 优惠券线下使用情况数据分析
  • k8s防火墙networkPolicy,其他规则和端口规则ports的匹配顺序,进站策略ingress和出站策略egress中,ports规则的常用方法。
  • 【绝对有用】顶尖ChatGPT学术论文指令集
  • 【TabBar嵌套Navigation案例-复习昨天的内容-预习今天的内容 Objective-C语言】
  • JavaEE:多线程进阶(JUC [java.util.concurrent] 的常见类)
  • 论文学习笔记 VMamba: Visual State Space Model
  • Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
  • Mac在Python项目中通过opencv模版匹配定位不到图片
  • Unity面试:什么是UnityEvent?