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.mzph.cn/web/76966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智驭未来:NVIDIA自动驾驶安全白皮书与实验室创新实践深度解析

一、引言:自动驾驶安全的范式革新 在当今数字化浪潮的推动下,全球自动驾驶技术正大步迈入商业化的深水区。随着越来越多的自动驾驶车辆走上道路,其安全性已成为整个行业乃至社会关注的核心命题。在这个关键的转折点上,NVIDIA 凭借…

多模态大模型 Qwen2.5-VL 的学习之旅

Qwen-VL 是阿里云研发的大规模视觉语言模型(Large Vision Language Model, LVLM)。Qwen-VL 可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。Qwen-VL 系列模型性能强大,具备多语言对话、多图交错对话等能力&#xff…

Redis 与 Memcache 全面对比:功能、性能与应用场景解析

Redis 和 Memcache 都是常用的内存数据库,以下是它们在多个方面的能力比较: 一、数据类型 Redis:支持丰富的数据类型,如字符串(String)、哈希(Hash)、列表(List&#x…

Oracle--PL/SQL编程

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 PL/SQL(Procedural Language/SQL)是Oracle数据库中的一种过程化编程语言,构建于SQL之上,允许编写包含S…

新增优惠券

文章目录 概要整体架构流程技术细节小结 概要 接口分析 一个基本的新增接口,按照Restful风格设计即可,关键是请求参数。之前表分析时已经详细介绍过这个页面及其中的字段,这里不再赘述。 需要特别注意的是,如果优惠券限定了使…

力扣面试经典150题(第二十三题)- KMP算法

问题 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haysta…

PostgreSQL 的 MVCC 机制了解

PostgreSQL 的 MVCC 机制了解 PostgreSQL 使用多版本并发控制(MVCC)作为其核心并发控制机制,这是它与许多其他数据库系统的关键区别之一。MVCC 允许读操作不阻塞写操作,写操作也不阻塞读操作,从而提供高度并发性。 一 MVCC 基本原理 1.1 M…

互联网大厂Java面试:RocketMQ、RabbitMQ与Kafka的深度解析

互联网大厂Java面试:RocketMQ、RabbitMQ与Kafka的深度解析 面试场景 面试官:马架构,您好!欢迎参加我们的面试。今天我们将围绕消息中间件展开讨论,尤其是RocketMQ、RabbitMQ和Kafka。您有十年的Java研发和架构设计经…

《巧用DeepSeek快速搞定数据分析》书籍分享

文章目录 前言内容简介作者简介购书链接书籍目录 前言 随着大数据时代的到来,数据分析和人工智能技术正迅速改变着各行各业的运作方式。DeepSeek作为先进的人工智能模型,不仅在自然语言处理领域具有广泛应用,还在数据分析、图像识别、推荐系…

4.Three.js 中 Camera 摄像机详解

一、什么是 Camera? 在 Three.js 中,Camera(摄像机)决定了我们如何观察三维场景。 你可以把它理解为我们“眼睛”的位置和方向,场景中的物体再复杂,如果没有摄像机,就没有“观察角度”&#x…

gem5-gpu教程03 当前的gem5-gpu软件架构(因为涉及太多专业名词所以用英语表达)

Current gem5-gpu Software Architecture 这是当前gem5-gpu软件架构的示意图。 Ruby是在gem5-gpu上下文中用于处理CPU和GPU之间内存访问的高度可配置的内存系统 CudaCore (src/gpu/gpgpu-sim/cuda_core.*, src/gpu/gpgpu-sim/CudaCore.py) Wrapper for GPGPU-Sim shader_cor…

负载均衡的实现方式有哪些?

负载均衡实现方式常见的有: 软件负载均衡、硬件负载均衡、DNS负载均衡 扩展 二层负载均衡:在数据链路层,基于MAC地址进行流量分发,较少见于实际应用中 三层负载均衡:在网络层,基于IP地址来分配流量,例如某…

MyBatis 和 MyBatis-Plus 在 Spring Boot 中的配置、功能对比及 SQL 日志输出的详细说明,重点对比日志输出的配置差异

以下是 MyBatis 和 MyBatis-Plus 在 Spring Boot 中的配置、功能对比及 SQL 日志输出的详细说明,重点对比日志输出的配置差异: 1. MyBatis 和 MyBatis-Plus 核心对比 特性MyBatisMyBatis-Plus定位基础持久层框架MyBatis 的增强版,提供代码生…

《数据结构世界的乐高积木:顺序表的奇幻旅程》

目录 1. 线性表 2. 顺序表 2.1 概念与结构 2.2 分类 2.2.1 静态顺序表 2.2.2 动态顺序表 2.3 动态顺序表的实现 1. 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的…

RHCE 练习二:通过 ssh 实现两台主机免密登录以及 nginx 服务通过多 IP 区分多网站

一、题目要求 1.配置ssh实现A,B主机互相免密登录 2.配置nginx服务,通过多ip区分多网站 二、实验 实验开始前需准备两台 linux 主机便于充当服务端以及客户端,两台主机 IP 如下图: 实验1:配置 ssh 实现 A&#xff0…

第十五届蓝桥杯 2024 C/C++组 好数

题目: 题目描述: 题目链接: 好数 思路: 第一种思路详解: 因为每次检查数都是从个位开始,所以对于每一个数都是先检查奇数位再检查偶数位,即存在先检查奇数位再检查偶数位的循环。注意一次完…

展锐Android13状态栏默认显示电池电量百分比

展锐Android13电池状态默认不显示电池电量百分比&#xff0c;打开 /frameworks/base/packages/SettingsProvider/res/values/defaults.xml 在xml的文件最后&#xff0c;增加一项配置def_show_battery_percent&#xff1a; <?xml version"1.0" encoding"u…

OpenCV 高斯模糊 cv2.GaussianBlur

OpenCV 高斯模糊 cv2.GaussianBlur flyfish cv2.GaussianBlur 是 OpenCV 库中用于对图像进行高斯模糊处理的函数。 高斯模糊的含义 高斯模糊是一种常见的图像滤波技术&#xff0c;它可以对图像进行平滑处理&#xff0c;减少图像中的噪声和细节&#xff0c;使得图像看起来更…

[密码学基础]密码学发展简史:从古典艺术到量子安全的演进

密码学发展简史&#xff1a;从古典艺术到量子安全的演进 密码学作为信息安全的基石&#xff0c;其发展贯穿人类文明史&#xff0c;从最初的文字游戏到量子时代的数学博弈&#xff0c;每一次变革都深刻影响着政治、军事、科技乃至日常生活。本文将以技术演进为主线&#xff0c;…

PostgreSQL认证培训推荐机构

首先来看一张2025年4月份db-engines上的数据库排行情况&#xff0c;前三名是雷打不动的Oracle、MySQL、Microsoft SQL Server&#xff0c;排名第四的就是我们今天的主角 - PostgreSQL数据库&#xff0c;从这张图上可以看出&#xff0c;PostgreSQL数据库的上升超非常明显&#x…