2024年9月嵌入式linux的进程状态切换图(在linux中进程的状态都有哪些在什么情况下发生转化)

 更新时间:2024-09-21 07:42:50

  ⑴嵌入式linux的进程状态切换图(在linux中进程的状态都有哪些在什么情况下发生转化

  ⑵在linux中进程的状态都有哪些在什么情况下发生转化

  ⑶进程状态包括以下五种:(TASK_RUNNING(运行态:进程是可执行的;或者正在执行,或者在运行队列中等待执行。(TASK_INTERRUPTIBLE(可中断睡眠态:进程被阻塞,等待某些条件的完成。一旦完成这些条件,内核就会将该进程的状态设置为运行态。(TASK_UNINTERRUPTIBLE(不可中断睡眠态:进程被阻塞,等待某些条件的完成。与可中断睡眠态不同的是,该状态进程不可被信号唤醒。(TASK_ZOMBIE(僵死态:该进程已经结束,但是其父进程还没有将其回收。(TASK_STOP(终止态:进程停止执行。通常进程在收到SIGSTOP、SIGTTIN、SIGTTOU等信号的时候会进入该状态。

  ⑷摄像头出现异常,需查看进程状态,请问嵌入式Lnux系统该如何查看进程状态

  ⑸设备管理器查看。右键点击计算机,选择管理,选择设备管理器,在右侧中选择图像设备,这时候你会看见有两个设备,卸载其中一个,最终只留下Integratedcamera。

  ⑹嵌入式ARMlinux操作系统中如何构建交叉开发环境

  ⑺这个问题相当专业了,之前我去周立功那边了解过的。

  ⑻按照以下步骤进行安装:

  ⑼安装位的兼容库和libncurses-dev库

  ⑽在安装交叉编译工具之前需要先安装位的兼容库和libncurses-dev库,安装兼容库需要从ubuntu的源库中下载,所以需要在Linux主机系统联网的条件下,通过终端使用如下命令安装:

  ⑾vmuserLinux-host~$sudoapt-getinstallia-libs

  ⑿若Linux主机系统没有安装位兼容库,在使用交叉编译工具的时候可能会出现错误:

  ⒀-bash:没有那个文件或目录

  ⒁在终端中使用如下命令则可以安装libncurses-dev库。

  ⒂vmuserLinux-host~$sudoapt-getinstalllibncurses-dev

  ⒃如果没有安装此库,在使用makemenucofig时出现如下所示的错误:

  ⒄***Unabletofindthencurseslibrariesorthe

  ⒅***requiredheaderfiles.

  ⒆***’makemenuconfig’requiresthencurseslibraries.

  ⒇Installncurses(ncurses-devel)andtryagain.

  ⒈make:***错误

  ⒉将交叉编译工具“g-..-glibc-..-multilib-._EasyARM-iMX.tar.bz”文件通过U盘的方式拷贝到Linux主机的“/tmp”目录下,然后执行如下命令进行解压安装交叉编译工具链:

  ⒊vmuserLinux-host~$cd/tmp

  ⒋vmuserLinux-host~$sudotar-jxvfg-..-glibc-..-multilib-._EasyARM-iMX.tar.bz-C/opt/

  ⒌vmuserLinux-host/tmp$#输入vmuser用户的密码“vmuser”

  ⒍执行完解压命令后,交叉编译工具链将被安装到“/opt/g-..-glibc-..-multilib-.”目录下。交叉编译器的具体目录是“/opt/g-..-glibc-..-multilib-./arm-fsl-linux-gnueabi/bin”,为了方便使用,还需将该路径添加到PATH环境变量中,其方法为:修改“/etc/profile”文件,具体操作方法如下:

  ⒎在终端中输入如下指令

  ⒏vmuserLinux-host~$sudovi/etc/profile#若提示输入密码,则输入“vmuser”

  ⒐用vi器打开“/etc/profile”文件后,在文件末尾增加如下一行内容:

  ⒑exportPATH=$PATH:/opt/g-..-glibc-..-multilib-./arm-fsl-linux-gnueabi/bin

  ⒒文件修改并保存后,再在终端中输入如下指令,更新环境变量,使设置生效。

  ⒓vmuserLinux-host~$source/etc/profile

  ⒔在终端输入arm-fsl-linux-gnueabi-并按TAB键,如果能够看到很多arm-fsl-linux-gnueabi-前缀的命令,则基本可以确定交叉编译器安装正确,如下图所示。

  ⒕嵌入式系统Linux内核开发实战指南的目录

  ⒖第部分嵌入式系统硬件开发第章嵌入式系统概述这一章对嵌入式系统的概念及其特点和应用作了概括介绍,笔者根据自己多年的经验阐述了对嵌入式系统的理解,并对一些常见的嵌入式处理器的硬件数据进行了比较。.嵌入式系统概念.嵌入式处理器.嵌入式系统应用.嵌入式系统发展.一些嵌入式处理器的硬件特性比较第章ARM处理器概述为了使本书内容完整,从第章到第章中的内容大部分是笔者阅读《ARM体系结构与编程》(详情参见附录中的参考文献的笔记和心得,把与嵌入式系统开发和Linux内核密切相关的硬件知识进行了概括和整理,本章主要介绍了ARM处理器的特点、ARM处理器的体系架构版本和ARM处理器系列。.ARM发展历程.ARM处理器特点.ARM处理器应用.ARM体系架构..ARM体系架构版本..ARM体系架构变种(Variant..ARM体系架构版本命名格式.ARM处理器..ARM系列处理器..ARM系列处理器..ARME系列处理器..ARME系列处理器..SecurCore系列处理器..StrongARM处理器..Xscale处理器第章ARM指令及其寻址方式本章主要介绍了ARM处理器的指令和寻址方式以及ARM汇编伪指令,这是做ARM处理器应用系统底层软件开发必备的知识。.ARM处理器的程序状态寄存器(PSR.ARM指令的条件码.ARM指令介绍..跳转指令..数据处理指令..乘法指令..杂类算术指令..状态寄存器访问指令..Load/Store内存访问指令..批量Load/Store内存访问指令..LDREX和STREX指令..信号量操作指令..异常中断产生指令..ARM协处理器指令.ARM指令寻址方式..数据处理指令的操作数的寻址方式..字及无符号字节的Load/Store指令的寻址方式..杂类Load/Store指令的寻址方式..批量Load/Store指令的寻址方式..协处理器Load/Store指令的寻址方式..ARM指令的寻址方式总结.ARM汇编伪操作(Directive..符号定义伪操作..数据定义伪操作..汇编控制伪操作..栈中数据帧描述伪操作..信息报告伪操作..其他伪操作.ARM汇编伪指令.Thumb指令介绍第章ARM处理器内存管理单元(MMU本章主要介绍了ARM处理器内存管理单元(MMU的工作原理,Linux内存管理功能是通过处理器硬件MMU实现的,在没有MMU的处理器系统中,Linux只能工作在物理地址模式,没有虚拟(线性地址空间的概念。.ARM处理器中CP协处理器的寄存器..访问CP寄存器的指令..CP寄存器介绍.MMU简介.系统访问存储空间的过程..使能MMU时的情况..禁止MMU时的情况..使能/禁止MMU时应注意的问题.ARM处理器地址变换过程..MMU的一级映射描述符..MMU的二级映射描述符..基于段的地址变换过程..粗粒度大页地址变换过程..粗粒度小页地址变换过程..细粒度大页地址变换过程..细粒度小页地址变换过程..细粒度极小页地址变换过程.ARM存储空间访问权限控制.TLB操作..使TLB内容无效..锁定TLB内容..解除TLB中被锁定的地址变换条目.存储访问失效..MMU失效(MMUFault..外部存储访问失效(ExternalAbort第章ARM处理器的Cache和WriteBuffer本章主要介绍了ARM处理器高速缓存(Cache和写缓存(WriteBuffer的工作原理,使读者了解如何提高处理器的性能。.Cache和WriteBuffer一般性介绍..Cache工作原理..地址映像方式..Cache写入方式原理简介..关于Write-through和Write-back..Cache替换策略..使用Cache的必要性..使用Cache的可行性.ARM处理器中的Cache和WriteBuffer..基本概念..Cache工作原理..Cache地址映射和变换方法..Cache分类..Cache替换算法..Cache内容锁定..MMU映射描述符中B位和C位的含义..Cache和WriterBuffer编程接口.ARM处理器的快速上下文切换技术..FCSE概述..FCSE原理..FCSE编程接口第章ARM处理器存储访问一致性问题本章介绍了在支持MMU、Cache和DMA的系统中可能出现的存储访问一致性问题,以及Linux中解决类似问题的方法。.存储访问一致性问题介绍..地址映射关系变化造成的数据不一致性..指令cache的数据不一致性问题..DMA造成的数据不一致问题..指令预取和自修改代码.Linux中解决存储访问一致性问题的方法第章ARM处理器工作模式与异常中断处理本章主要介绍了ARM处理器的工作模式和异常中断处理过程,这是ARM处理器系统启动程序编写者或Bootloader开发人员的必备知识。.ARM处理器工作模式.ARM处理器异常中断向量表和优先级.ARM处理器异常中断处理..进入异常中断处理..退出异常中断处理.ARM处理器的中断(IRQ或FIQ第章ARM处理器启动过程本章根据笔者的开发经验介绍了ARM处理器系统的启动过程以及编写ARM处理器系统启动程序需要注意的事项。.ARM处理器上电/复位操作.ARM处理器系统初始化过程.ARM处理器系统初始化编程注意事项第章嵌入式系统设计与调试本章根据笔者多年的开发经验介绍了嵌入式系统的设计流程和调试方法,列举了大量笔者工作中碰到的实际案例。本章内容对于嵌入式系统硬件开发和调试有较高的参考、指导价值。.嵌入式系统设计流程.嵌入式系统硬件原理设计与审核.硬件设计工具软件.嵌入式系统调试仿真工具.嵌入式系统调试诊断方法第章自制简易JTAG下载烧写工具本章根据笔者自己制作简易JTAG线缆的经验,介绍了简易JTAG线缆的硬件原理和软件流程,这是初学者必备的最廉价的工具,必须掌握。.JTAG简介..一些基本概念..JTAG接口信号..TAP控制器的状态机..JTAG接口指令集.简易JTAG线缆原理..PC并口定义..PC并口的寄存器..简易JTAG线缆原理图..简易JTAG线缆烧写连接图(见图-.简易JTAG烧写代码分析..简易JTAG烧写程序(flashp使用说明..flash与CPU连接及flash属性描述文件..简易JTAG烧写程序的执行逻辑和流程第部分Linux内核开发初步第章Bootloader本章根据笔者的工作经验介绍了流行的几种Bootloader、Bootloader应该具备的基本功能以及Bootloader的裁剪与移植。.Bootloader的任务和作用.各种各样的Bootloader.Bootloader编译环境.Bootloader的移植与裁减.编译Bootloader.烧写Bootloader.Bootloader使用举例.Bootloader修改举例第章创建嵌入式Linux开发环境本章介绍了如何创建嵌入式系统Linux内核交叉开发环境,本章和后续章的内容是嵌入式系统Linux内核开发的基础,必须掌握。.安装Linuxhost.在虚拟机中安装Linuxhost.安装Linux交叉编译环境.在主机上设置TFTPServer.在主机上设置DHCPServer.在主机上设置Telserver.在开发过程中使用NFS.设置超级终端第章编译Linux内核本章介绍了Linux内核的配置和编译方法。.获取Linux内核源代码.Linux内核目录结构.配置Linux内核.编译Linux内核第章创建Linux根文件系统本章介绍了Linux的根文件系统的结构以及创建根文件系统的方法。.根文件系统概述.根文件系统目录结构.获取根文件系统组件源代码.编译根文件系统源代码.创建一个MB的RAMDISK根文件系统.在根文件系统中添加驱动模块或者应用程序第章固化Linux内核和根文件系统本章介绍了固化(烧写Linux内核和根文件系统的方法。第章关于?Clinux本章简要介绍了?Clinux与标准Linux的区别。.?Clinux简介.?Clinux源代码目录结构.?Clinux与标准Linux的区别.编译?Clinux第部分Linux.内核原理第章Linux..ARM启动过程本章以start_kernel()和init()函数中调用到的函数说明的方式,介绍了从Linux汇编代码入口到init内核进程最后调用用户空间init命令的Linux整个启动过程。本章内容是笔者第一次阅读Linux内核源代码时对这些函数的注释,仅供读者了解start_kernel()和init()函数中调用到的每个函数的大致功能时使用。.Linux..中与ARM处理器平台硬件相关的结构和全局变量..相关数据结构..相关全局变量.Linux汇编代码入口.Linux汇编入口处CPU的状态.start_kernel()函数之前的汇编代码执行过程.start_kernel()函数中调用的函数介绍..lock_kernel()函数..page_address_init()函数..printk(linux_banner)..setup_arch(&mand_line)函数..setup_per_cpu_areas()函数..smp_prepare_boot_cpu()函数..sched_init()函数..build_all_zonelists()函数..page_alloc_init()函数..printk(Kernelmandline:%s

  ⒗,saved_mand_line)..parse_early_param()函数..parse_args()函数..sort_main_extable()函数..trap_init()函数..rcu_init()函数..init_IRQ()函数..pidhash_init()函数..init_timers()函数..softirq_init()函数..time_init()函数..console_init()函数..profile_init()函数..local_irq_enable()函数..vfs_caches_init_early()函数..mem_init()函数..kmem_cache_init()函数..numa_policy_init()函数..calibrate_delay()函数..pidmap_init()函数..pgtable_cache_init()函数..prio_tree_init()函数..anon_vma_init()函数..fork_init(num_physpages)函数..proc_caches_init()函数..buffer_init()函数..unnamed_dev_init()函数..security_init()函数..vfs_caches_init(num_physpages)函数..radix_tree_init()函数..signals_init()函数..page_writeback_init()函数..proc_root_init()函数..check_bugs()函数..acpi_early_init()函数..rest_init()函数.init()进程执行过程..smp_prepare_cpus(max_cpus)函数..do_pre_smp_initcalls()函数..fixup_cpu_present_map()函数..smp_init()函数..sched_init_smp()函数..populate_rootfs()函数..do_basic_setup()函数..sys_aess()函数..free_initmem()函数..unlock_kernel()函数..numa_default_policy()函数..sys_dup()函数..execve()函数第章Linux内存管理从本章开始,笔者将带领读者走进神秘的Linux内核世界。笔者在阅读内核源代码以及两本相关参考书(见参考文献的基础上,以自己的理解和语言总结概括了Linux内核每个组件的原理。笔者对与每个内核组件相关的关键数据结构和全局变量作了尽量详尽的说明,并且对核心函数进行了详细注释,在向读者灌输理论知识的同时引导读者自己去阅读、分析Linux内核源代码。本章讲解了Linux内核第一大核心组件“内存管理”的原理和实现内幕。.Linux内存管理概述..Linux内存管理的一些基本概念..内存管理相关数据结构..内存管理相关宏和全局变量..Linux内存管理的任务..Linux中的物理和虚拟存储空间布局.为虚拟(线性地址存储空间建立页表.设置存储空间的访问控制属性.Linux中的内存分配和释放..在系统启动初期申请内存..系统启动之后的内存分配与释放第章Linux进程管理本章讲解了Linux内核第二大核心组件“进程管理”的原理和实现内幕。.进程管理概述..进程相关概念..进程分类..号进程..号进程..其他一些内核线程..进程描述符(structtask_struct..进程状态..进程标识符(PID..current宏定义..进程链表..PIDhash表和链表..硬件上下文(HardwareContext..进程资源限制..进程管理相关数据结构..进程管理相关宏定义..进程管理相关全局变量.进程管理相关初始化.进程创建与删除.进程调度..进程类型..进程调度类型..基本时间片计算方法..动态优先级算法..交互式进程..普通进程调度..实时进程调度..进程调度函数分析.进程切换.用户态进程间通信..信号(Signal..管道(pipe和FIFO(命名管道..进程间通信原语(SystemVIPC第章Linux文件管理本章讲解了Linux内核第三大核心组件“文件系统”的原理和实现内幕。.文件系统概述..Linux文件管理相关概念..Linux文件管理相关数据结构..Linux文件管理相关宏定义..Linux文件管理相关全局变量.文件管理相关初始化.文件系统类型注册.挂接文件系统.文件系统类型超级块读取..get_sb_single()通用超级块读取函数..get_sb_nodev()通用超级块读取函数..get_sb_bdev()通用超级块读取函数..get_sb_pseudo()通用超级块读取函数.路径名查找.访问文件操作..打开文件..关闭文件..读文件..写文件.异步I/O系统调用.Linux特殊文件系统..rootfs文件系统..sysfs文件系统..devfs设备文件系统..bdev块设备文件系统..ramfs文件系统..proc文件系统.磁盘文件系统..ext文件系统相关数据结构..ext文件系统磁盘分区格式..ext文件系统的各种文件..创建ext文件系统..ext文件系统的操作方法.关于initramfs..initramfs概述..initramfs与initrd的区别..initramfs相关全局变量..initramfs被编译链接的位置..initramfs文件的生成过程..initramfs二进制文件格式说明(cpio格式..initramfs二进制文件和列表文件对照示例..initramfs利弊.关于initrd..initrd概述..initrd相关全局变量.关于gzip压缩文件第章Linux模块设计本章讲解了Linux内核模块程序与应用程序的区别以及如何编写和加载Linux内核模块程序。.Linux模块设计概述.Linux的内核空间和用户空间.内核模块与应用程序的区别.编译模块.装载和卸载模块.模块层叠.模块版本依赖.模块编程示例第章Linux系统异常中断管理本章讲解了Linux内核如何管理系统异常中断以及Linux系统调用的实现内幕。.Linux异常中断处理.指令预取和数据访问中止异常中断处理..指令预取中止异常中断处理..数据访问中止异常中断处理.Linux中断处理..内核模式下的中断处理..用户模式下的中断处理.从中断返回.Linux中断管理..Linux中断管理相关数据结构与全局变量..Linux中断管理初始化..安装和卸载中断处理程序..使能和禁止中断.Linux系统调用..Linux系统调用内核实现过程..从系统调用返回..Linux系统调用用户程序接口函数..Linux系统调用用户接口函数与内核实现函数之间参数传递第章Linux软中断和工作队列本章讲解了Linux内核中的两种延迟处理机制“软中断”和“工作队列”的原理和实现。.概述.Linux软中断..软中断相关数据结构和全局变量..软中断初始化..软中断的核心操作函数do_softirq()..软中断看护进程执行函数ksoftirqd()..如何使用软中断.Linux工作队列..Linux工作队列相关数据结构和全局变量..Linux工作队列初始化..将工作加入到工作队列中..工作者进程执行函数worker_thread()..使用Linux工作队列第章Linux并发与竞态本章讲解了Linux内核同步机制,包括几种锁定技术以及免锁算法。.并发与竞态概述..Linux中的并发源..竞态可能导致的后果..避免竞态的规则.消除竞态的“锁定”技术..信号量(semphore和互斥体(mutualexclusion..读写信号量(rw_semaphore..完成量(pletion..自旋锁(spinlock_t..读写自旋锁(rwlock_t..使用“锁定”技术的注意事项.消除竞态的非“锁定”方法..免锁算法..原子操作..位操作..顺序锁..读-复制-更新(Read-Copy-Update,RCU第章Linux设备驱动程序本章讲解了Linux内核第四大核心组件“设备驱动”的原理和实现内幕。同时还总结归纳了编写各种设备驱动程序的方法和步骤。.设备驱动程序概述..设备驱动程序组成部分..设备号..设备文件..编写设备驱动程序的关键.字符设备驱动程序..字符设备相关数据结构..字符设备相关全局变量..字符设备驱动程序全局初始化..为字符设备分配设备号..注册字符设备驱动程序..字符设备的操作方法..用户对字符设备驱动程序的调用过程..如何编写字符设备驱动程序..关于TTY设备驱动程序..控制台设备驱动程序.块设备驱动程序..块设备相关数据结构..块设备相关宏定义..块设备相关全局变量..块设备驱动程序全局初始化..为块设备分配主设备号..注册块设备驱动程序..块设备驱动程序的操作方法..调用块设备驱动程序过程..I/O调度..如何编写块设备驱动程序.网络设备驱动程序..网络设备驱动程序概述..网络设备相关数据结构..网络设备相关宏定义..网络设备相关全局变量..创建_device结构..注册网络设备..网络设备的操作方法..网络设备中断服务程序..如何编写网络设备驱动程序.PCI设备驱动程序..PCI接口定义..PCI设备的三个地址空间..PCI总线仲裁..PCI设备编号..如何访问PCI配置空间..如何配置PCI设备..PCI驱动程序相关数据结构..PCI驱动程序相关宏定义..PCI驱动程序相关全局变量..Bootloader和内核做的事..PCI驱动程序注册..PCI驱动程序接口函数..如何编写PCI驱动程序第部分Linux内核开发高级指南第章Linux系统参数设置从本章开始的后续章节主要讲解了比较高级或者平时较少关注的Linux内核方面的知识,本章讲解了Linux中的种系统参数格式和设置方法。.旗语系统参数(tag..与旗语系统参数相关数据结构和全局变量..旗语系统参数说明..旗语系统参数设置方法.前期命令行设置的系统参数..与前期命令行系统参数相关数据结构和全局变量..前期命令行设置的系统参数说明..前期命令行系统参数设置方法..如何添加自己的前期命令行设置的系统参数.老式命令行系统参数..与老式命令行系统参数相关数据结构和全局变量..老式命令行设置的系统参数说明..老式命令行设置的系统参数设置方法..如何添加自己的老式命令行设置的系统参数.命令行系统参数..与命令行系统参数相关数据结构和全局变量..命令行设置的系统参数说明..命令行设置的系统参数设置方法第章Linux内核调试本章介绍了Linux内核的调试方法。.打开Linux内核及其各模块自带的调试开关.内核剖析(Profiling.通过打印调试(printk..关于printk()..内核信息级别..打印速度限制..控制台重定向.使用proc文件系统调试.oops消息.通过跟踪命令strace调试.使用gdb、kdb、kgdb调试第章Linux内核移植本章介绍了Linux内核的移植方法。第章Linux内核优化本章介绍了Linux内核的优化方法。.编译优化.根据CPU特性进行优化.对内核进行裁减.优化系统内存配置.优化系统启动过程以缩减系统启动时间.内存映射优化.工具软件辅助优化第章Linux定时器本章介绍了Linux内核的软件定时器。.定时器相关数据结构.定时器相关宏定义.定时器相关全局变量.定时器和时钟初始化.获取系统时间.延迟函数.与定时器相关系统调用.使用定时器方法第章杂项本章介绍了PER_CPU变量以及Linux中的数据类型定义。.per_cpu变量.Linux中的数据类型定义第章编译链接文件说明本章注释了ARM处理器系统中Linux内核的链接文件,以帮助读者了解编译出来的Linux内核各区段在内存中的存放位置。参考文献

  ⒘嵌入式linux中图形界面是怎么实现的

  ⒙XWindowSystem(XWindow系统是目前Linux构建GUI最常用的系统,最常见的实现是X.。类似的还有Wayland(Wayland。在WindowSystem(如上,通常是X之上,有一系列的DesktopEnvironment(桌面环境,比如Gnome,KDE等等,来控制桌面、窗口、菜单、通知等行为,提供一套较为统一的操作体验。Qt,GTK+等是GUI程序的开发库,他们的应用一般不仅仅在Linux操作系统上,也并不局限于Gnome、KDE之类的桌面环境,也不限制于C、C++等开发语言。同样构建于WindowSystem之上,有一系列的WindowManager(窗口管理器,他们是独立于DesktopEnvironment存在的,主要是控制窗口的表现。不过实际使用中一般是每一个DesktopEnvironment都提供一个官方的WindowManager来统一风格。DisplayManager跟WindowManager相似,基本是独立于DesktopEnvironment存在的,也就是说KDM完全可以搭配Gnome使用。他们主要负责以GUI形式接管用户登录过程,并且加载用户指定的DesktopEnvironment。

  ⒚典型嵌入式linux软件部分由哪些模块组成他们的功能及相互联系Bootloader分为哪两阶段分

  ⒛典型的嵌入式系统,软件部分从下到上,分别是boot,kernel,rootfs,fsimg和上层应用。起到的作用分别是,引导内核,启动内核,挂载根文件系统,挂载实际文件系统,开启上层应用主循环。你问的这些问题,每一点都可以单独拿出来,长篇大论的讲很久了。建议去网上先看相关的资料。贪多求快是不好的,一个知识点一个知识点的掌握。

  ps是Linux中最基础的浏览系统中的进程的命令。能列出系统中运行的进程,包括进程号、命令、CPU使用量、内存使用量等。接下来解读一下Linux操作系统的进程和Windows「Ctrl+Alt+delete」直接的差异。

  在进行了解进程命令之前需要知道进程的一些状态

  ps工具标识进程的种状态码:

  Linux操作系统进程执行的状态转换图如图所示:

  下面来看一下ps命令ps--help命令可以查看ps命令的使用说明

  或者使用manps命令查询ps的详细说明

  在man手册关于ps的解读中,总结了一下几个参数的含义:

  以上的参数是可以拼接使用的,那就了解一些常用的参数组合psaux命令

  查看进程状态这两个是命令是最常用的,使用psaux可以查看进程的详细运行状态等。使用ps-ef不仅可以显示自身的PID,也可以显示PPID(父进程)。但是显示不了进程的运行状态

  top命令top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

  man手册关于top的解释

  关闭进程,重启进程在上一片文章中linux的目录结构里面说过,在目录/etc/init.d/目录下包含许多系统各种服务的启动和停止脚本。假设进程占用内存较大或者进程异常,我们是重启这个进程restart。如下图所示:

  我们重启了mysqld这个进程,可以看出进程号已经改变(从到),说明进程已经重启。

  Linux下有个特殊的进程,idle进程(PID=),init进程(PID=)和kthreadd(PID=)

  我们来看一下进程状态

  可以看到很多进程的PPID号是和。也就是init进程和kthreadd进程。

  在使用Windows系统的过程中,都碰到过应用程序卡死的情况。应对此问题,我们一般都是等待失去响应的程序恢复,或者是直接使用任务管理器将其强制关闭,然后再重新打开。

  在Linux中,遇到特别耗费资源的进程,当然需要使用top命令查看进程占用率高的进程。或者使用free-m命令查看内存剩余。假设需要强杀进程来释放空间。我们涉及到Linux中信号?的知识,在这里简单的描述一下,信号的详解会在接下来的文章里面叙述。free-m命令查看内存空间

  在linux中存在着种信号使用kill-l命令查看信号列表

  在前面说过进程会被这些个信号》(进程收到SIGSTOP,SIGSTP,SIGTIN,SIGTOU信号强制停止运行)那问题就在于如何发信号给这些个进程。使用kill命令发信号

  我们从上面可以看到mysqld进程被重启了。

  关于Linux的这一块进程的知识还有很多,后面的文章跟大家分享僵尸进程,孤儿进程等等知识,以及守护进程(daemon进程).

  嵌入式os中线程通常有几种状态以及每个状态的特点

  linux中的线程状态、TASK_RUNNING:进程当前正在运行,或者正在运行队列中等待调度。、TASK_INTERRUPTIBLE:进程处于睡眠状态,正在等待某些事件发生。进程可以被信号中断。接收到信号或被显式的唤醒呼叫唤醒之后,进程将转变为TASK_RUNNING状态。、TASK_UNINTERRUPTIBLE:此进程状态类似于TASK_INTERRUPTIBLE,只是它不会处理信号。中断处于这种状态的进程是不合适的,因为它可能正在完成某些重要的任务。当它所等待的事件发生时,进程将被显式的唤醒呼叫唤醒。、TASK_STOPPED:进程已中止执行,它没有运行,并且不能运行。接收到SIGSTOP和SIGTSTP等信号时,进程将进入这种状态。接收到SIGCONT信号之后,进程将再次变得可运行。、TASK_TRACED:正被调试程序等其他进程监控时,进程将进入这种状态。、EXIT_ZOMBIE:进程已终止,它正等待其父进程收集关于它的一些统计信息。、EXIT_DEAD:最终状态(正如其名。将进程从系统中删除时,它将进入此状态,因为其父进程已经通过wait()或waitpid()调用收集了所有统计信息。、TASK_KILLABLE:Linux?kernel..引入了这种进程状态,用于将进程置为睡眠状态,它可以替代有效但可能无法终止的TASK_UNINTERRUPTIBLE进程状态,以及易于唤醒但更加安全的TASK_INTERRUPTIBLE进程状态。

您可能感兴趣的文章:

相关文章