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

linux嵌入式(进程与线程1)

Linux进程

进程介绍

1. 进程的基本概念

  • 定义:进程是程序的一次执行过程,拥有独立的地址空间、资源(如内存、文件描述符)和唯一的进程 ID(PID)。

  • 组成

    • 代码段:程序的指令。

    • 数据段:全局变量和静态变量。

    • 堆栈段:局部变量和函数调用信息。

    • 进程控制块(PCB):内核数据结构(如 task_struct),存储进程状态、PID、优先级等信息。


2. 进程的生命周期

Linux 进程通常有以下状态(可通过 ps 命令查看):

  • R (Running):正在运行或可运行(就绪)。

  • S (Sleeping):可中断的睡眠(等待事件,如 I/O)。

  • D (Uninterruptible Sleep):不可中断的睡眠(通常等待硬件操作)。

  • T (Stopped):被信号(如 SIGSTOP)暂停。

  • Z (Zombie):已终止但父进程未回收资源。

  • X (Dead):完全终止(不可见)。


3. 进程相关命令

查看进程
  • ps:查看当前进程快照。

    bash

    复制

    下载

    ps aux       # 查看所有进程详细信息
    ps -ef       # 查看完整格式的进程列表
  • top/htop:动态查看进程资源占用(CPU、内存等)。

  • pstree:以树形结构显示进程关系。

管理进程
  • kill:发送信号终止或控制进程。

    bash

    复制

    下载

    kill -9 PID   # 强制终止进程(SIGKILL)
    kill -15 PID  # 优雅终止(SIGTERM)
  • nice/renice:调整进程优先级(Nice 值范围:-20 到 19,值越低优先级越高)。

  • bg/fg:控制进程后台/前台运行。

查找进程
  • pgrep:根据名称查找 PID。

    bash

    复制

    下载

    pgrep nginx
  • pidof:获取正在运行的程序的 PID。

    bash

    复制

    下载

    pidof sshd

4. 进程间通信(IPC)

Linux 进程可以通过以下方式通信:

  • 信号(Signals):如 SIGINT(Ctrl+C)、SIGKILL

  • 管道(Pipe):匿名管道(|)或命名管道(mkfifo)。

  • 共享内存:高效的数据共享。

  • 消息队列:存储在内核中的消息链表。

  • 套接字(Socket):跨网络通信。


5. 前台与后台进程

  • 前台进程:占用终端,接收输入(如直接运行 vim)。

  • 后台进程:不占用终端,以 & 启动:

    bash

    复制

    下载

    sleep 60 &
  • 切换状态

    • Ctrl + Z:暂停进程并转入后台。

    • jobs:查看后台作业。

    • fg %n:将后台作业 n 切换到前台。


6. 守护进程(Daemon)

  • 长期运行的后台服务进程(如 sshdnginx)。

  • 特点:

    • 脱离终端(由 init 或 systemd 管理)。

    • 通常以 root 权限运行。

  • 创建方式:通过 fork() 两次并脱离控制终端。


7. 僵尸进程与孤儿进程

  • 僵尸进程:子进程终止后,父进程未调用 wait() 回收其资源。解决:

    bash

    复制

    下载

    kill -HUP PPID   # 重启父进程
  • 孤儿进程:父进程先终止,子进程由 init(PID 1)接管。


8. 系统调用与进程管理

Linux 提供以下关键系统调用:

  • fork():创建子进程。

  • exec():替换当前进程映像。

  • wait():父进程等待子进程终止。

main函数定义:

多进程代码示例

system创建子进程

fork ——system底层

execve进程跳转

http://www.xdnf.cn/news/119737.html

相关文章:

  • 2023 国考
  • Node.js 学习入门指南
  • Java:XML被自动转义
  • QT创建新项目(13)
  • 使用Django REST Framework快速开发API接口
  • 【前端】【面试】在前端开发中,如何优化 CSS 以提升页面渲染性能?
  • 服务器上安装node
  • 2025年3月电子学会青少年机器人技术(六级)等级考试试卷-理论综合
  • Vue3中Symbol的使用说明
  • CRTP(Curiously Recurring Template Pattern)
  • 试水低代码平台Nocoly
  • 基于Matlab的车牌识别系统
  • 倚光科技:详解非球面光学元件的加工与检测方法
  • DrissionPage 请求一次换一个代理(不重启chrome)
  • 【MongoDB + Spark】 技术问题汇总与解决方案笔记
  • FastMCP与FastAPI:构建自定义MCP服务器
  • 架构-信息安全技术基础知识
  • 基于Python+Flask的MCP SDK响应式文档展示系统设计与实现
  • SpringSecurity源码解读AbstractAuthenticationProcessingFilter
  • 沁恒CHV203中断嵌套导致修改线程栈-韦东山
  • 使用 VMware 安装一台 Linux 系统之Centos
  • 国芯思辰| 24位生理电采集模拟前端100%兼容ADS1294R睡眠监测仪
  • 济南国网数字化培训班学习笔记-第二组-3节-电网工程建设项目部门
  • VLM模型评估
  • 扣子空间出版的扣子空间使用手册和介绍
  • 数据库+Docker+SSH三合一!深度评测HexHub的全栈开发体验
  • R语言中的常用内置函数
  • Spring Boot常用注解详解:实例与核心概念
  • 各种各样的bug合集
  • HTML给图片居中