当前位置: 首页 > 科技观察

十大必须知道的Linux系统进程

时间:2023-03-16 01:06:38 科技观察

当我们习惯性地执行ps命令时,会看到很多“奇怪”的进程,而这些进程大部分都是系统的内核进程。很多同学对此知之甚少,所以今天小编就为大家整理一下系统进程的入门介绍,希望对大家了解操作系统进程有所帮助。在日常的运维工作中,我们经常会看到一些奇怪的系统进程占用比较高的资源。而且总是听到业务线的同学问,“这个xxx是什么进程?为什么启用了这么多?”而这些系统级的内核进程是用方括号括起来的,它们会执行系统的一些辅助功能(比如将缓存写入磁盘),不带括号的进程是用户执行的进程(比如PHP、Nginx、ETC。)。如下图所示:下面为大家介绍10个常见的系统进程:kswapd0系统会在一定时间后唤醒kswapd,看内存是否紧张。如果没有,睡觉。在kswapd中,有2个valves,pages_hige和pages_low,当空闲内存页数低于pages_low时,kswapd进程会扫描内存,每次释放32个空闲页,直到空闲页数达到pages_high。kjournaldjournal:记??录所有文件系统上的元数据变化,最慢的模式。ordered:默认使用的模式,只记录文件系统变化的元数据,记录变化前的日志。writeback:最快的模式,同样只记录修改过的元数据,依赖标准的文件系统写入流程将数据写入硬盘pdflushpdflush用于将内存中的内容与文件系统同步。例如:当一个文件在内存中被修改时,pdflush负责将其写回磁盘。每当内存中的脏页超过10%时,pdflush就会将这些页备份到硬盘中。这个比例是可调的,/etc/sysctl.conf中的vm.dirty_background_ratio项的默认值为10。内核线程和kthreadd一样只有一个,其作用是管理和调度其他内核线程。它是在内核初始化时创建的,它会循环运行一个名为kthreadd的函数。该函数的作用是运行kthread_create_list全局链表中维护的kthread。可以调用kthread_create创建一个kthread,kthread会加入到kthread_create_list链表中,kthread_create会弱化kthreadd_task。当kthreadd执行kthread时,它会调用旧的接口——kernel_thread运行一个名为“kthread”的内核线程来运行创建的kthread。执行完的kthread会从kthread_create_list链表中删除,kthreadd会继续调用调度器让出CPU。此线程无法关闭。Migration一共有32个内核线程,从migration/0到migration/31。每个处理器核心对应一个迁移内核线程,主要作为对应CPU核心的迁移进程,进行进程迁移操作。该函数是migration_thread()。属于2.6内核的负载均衡系统,系统启动时自动加载进程(每个CPU一个),并将自己设置为SCHED_FIFO的实时进程,然后检查是否有请求等待在runqueue::migration_queue中处理,如果没有,则在TASK_INTERRUPTIBLE中Sleep,被唤醒后再次检查。migration_thread()只是CPU绑定和CPU电源管理等功能的接口。该线程是调度系统的重要组成部分。watchdog内核线程一共有32个,从watchdog/0到watchdog/31,每个处理器核心对应一个watchdog内核线程,watchdog用于监控系统的运行,当系统出现故障时自动重启系统,包括内核看门狗模块和用户空间看门狗程序。在Linux内核下,watchdog的基本工作原理是:当watchdog启动时(即/dev/watchdog设备开启后),如果在设定的时间间隔(1分钟)内没有执行/dev/watchdog操作,硬件看门狗电路或软件定时器会重启系统,每次写操作都会导致定时器复位。events这样的内核线程共有32个,从events/0到events/31,每个处理器核对应一个events内核线程。用于处理内核事件将许多硬件和软件事件(如断电、文件更改)转换为事件,分发给对相应事件感兴趣的线程进行响应。kblockd内核线程一共有32个,从kblockd/0到kblockd/31,每个处理器核心对应一个kblockd内核线程。用于管理系统的块设备,它会周期性地激活系统中的块设备驱动程序。如果拥有块设备,则无法删除这些线程。aio内核线程一共有32个,从aio/0到aio/31,每个处理器核心对应一个aio内核线程,代替用户进程管理I/O支持用户态AIO(异步I/O),应该不是关闭。rpciod有32个内核线程,从rpciod/0到rpciod/31,每个处理器核对应一个rpciod内核线程,其主要作用是作为远程过程调用服务的守护进程,用于启动I/O来自客户端Service,一般在启动NFS服务时使用。总结进程是操作系统中一个非常重要的概念,系统上运行的所有数据都会以进程的类型存在。在Linux系统中:当任何事件被触发时,系统都会将其定义为一个进程,因此进程是Linux程序实现的唯一途径。