当前位置: 首页 > 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进程跳转

相关文章:

  • react 子组件暴露,父组件接收
  • Redis持久化机制深度解析:RDB、AOF与混合持久化
  • 计算机图形学实践:结合Qt和OpenGL实现绘制彩色三角形
  • (第一篇)Springcloud简介与工程搭建
  • Winddows11官网下载安装VMware Workstation Pro17(图文详解)
  • Redis LFU 策略参数配置指南
  • 【C++基础知识】namespace前加 inline
  • 初识Redis · 主从复制(上)
  • 10天学会嵌入式技术之51单片机-day-8
  • Kotlin Multiplatform--01:项目结构基础
  • ctfhow——web入门214~218(时间盲注开始)
  • 【FAQ】安装Agent的主机,为何不能更改显示分辨率
  • SQL Server 2008 R2中varchar(max)的含义
  • Hive 数据同步到 Doris 最佳实践方案:从场景适配到性能调优全解析
  • Python3 基础:控制流结构(条件语句、循环)
  • 【C++基础知识】C++类型特征组合:`disjunction_v` 和 `conjunction_v` 深度解析
  • Visual Studio C/C++编译器cl.exe的/source-charset与/execution-charset设置项
  • 扩展中国剩余定理
  • day 32 学习笔记
  • 【前端】【业务场景】【面试】在前端开发中,如何优化 SVG(可缩放矢量图形)的性能,特别是在处理复杂图形和动画时
  • 王沪宁会见越共中央委员、越南祖国阵线中央副主席兼秘书长阮氏秋荷
  • 岭南非遗大IP来上海了,舞剧《英歌》在文化广场连演两场
  • 为什么猛起身会头晕?你的身体在发出这个警报
  • 舞剧《百合花》7月绽放,王安忆:这是送给母亲的一份礼物
  • 上影新片《密档》杀青,全新角度演绎石库门秘战
  • 体坛联播|曼城击败维拉迎英超三连胜,巴萨遭遇魔鬼赛程