linux里的进程简介
- 格式:docx
- 大小:14.15 KB
- 文档页数:4
LINUXCGROUP总结简介:Linux CGroup全称Linux Control Group,是Linux内核的⼀个功能,⽤来限制,控制与分离⼀个进程组群的资源(如CPU、内存、磁盘输⼊输出等)。
这个项⽬最早是由Google的⼯程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。
在2007年时,因为在Linux内核中,容器(container)这个名词太过⼴泛,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。
然后,其它开始了他的发展。
Linux CGroupCgroup 可让您为系统中所运⾏任务(进程)的⽤户定义组群分配资源 — ⽐如 CPU 时间、系统内存、⽹络带宽或者这些资源的组合。
您可以监控您配置的cgroup,拒绝cgroup 访问某些资源,甚⾄在运⾏的系统中动态配置您的cgroup。
主要功能:1. 限制资源使⽤,⽐如内存使⽤上限以及⽂件系统的缓存限制。
2. 优先级控制,CPU利⽤和磁盘IO吞吐。
3. ⼀些审计或⼀些统计,主要⽬的是为了计费。
4. 挂起进程,恢复执⾏进程。
cgroups⼦系统1. cpu ⼦系统,主要限制进程的 cpu 使⽤率。
2. cpuacct ⼦系统,可以统计 cgroups 中的进程的 cpu 使⽤报告。
3. cpuset ⼦系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。
4. memory ⼦系统,可以限制进程的 memory 使⽤量。
5. blkio ⼦系统,可以限制进程的块设备 io。
6. devices ⼦系统,可以控制进程能够访问某些设备。
7. net_cls ⼦系统,可以标记 cgroups 中进程的⽹络数据包,然后可以使⽤ tc 模块(traffic control)对数据包进⾏控制。
8. net_prio — 这个⼦系统⽤来设计⽹络流量的优先级9. freezer ⼦系统,可以挂起或者恢复 cgroups 中的进程。
Linux系统编程之进程控制(进程创建、终⽌、等待及替换)进程创建在上⼀节讲解进程概念时,我们提到fork函数是从已经存在的进程中创建⼀个新进程。
那么,系统是如何创建⼀个新进程的呢?这就需要我们更深⼊的剖析fork 函数。
1.1 fork函数的返回值调⽤fork创建进程时,原进程为⽗进程,新进程为⼦进程。
运⾏man fork后,我们可以看到如下信息:#include <unistd.h>pid_t fork(void);fork函数有两个返回值,⼦进程中返回0,⽗进程返回⼦进程pid,如果创建失败则返回-1。
实际上,当我们调⽤fork后,系统内核将会做:分配新的内存块和内核数据结构(如task_struct)给⼦进程将⽗进程的部分数据结构内容拷贝⾄⼦进程添加⼦进程到系统进程列表中fork返回,开始调度1.2 写时拷贝在创建进程的过程中,默认情况下,⽗⼦进程共享代码,但是数据是各⾃私有⼀份的。
如果⽗⼦只需要对数据进⾏读取,那么⼤多数的数据是不需要私有的。
这⾥有三点需要注意:第⼀,为什么⼦进程也会从fork之后开始执⾏?因为⽗⼦进程是共享代码的,在给⼦进程创建PCB时,⼦进程PCB中的⼤多数数据是⽗进程的拷贝,这⾥⾯就包括了程序计数器(PC)。
由于PC中的数据是即将执⾏的下⼀条指令的地址,所以当fork返回之后,⼦进程会和⽗进程⼀样,都执⾏fork之后的代码。
第⼆,创建进程时,⼦进程需要拷贝⽗进程所有的数据吗?⽗进程的数据有很多,但并不是所有的数据都要⽴马使⽤,因此并不是所有的数据都进⾏拷贝。
⼀般情况下,只有当⽗进程或者⼦进程对某些数据进⾏写操作时,操作系统才会从内存中申请内存块,将新的数据拷写⼊申请的内存块中,并且更改页表对应的页表项,这就是写时拷贝。
原理如下图所⽰:第三,为什么数据要各⾃私有?这是因为进程具有独⽴性,每个进程的运⾏不能⼲扰彼此。
1.3 fork函数的⽤法及其调⽤失败的原因fork函数的⽤法:⼀个⽗进程希望复制⾃⼰,通过条件判断,使⽗⼦进程分流同时执⾏不同的代码段。
linux的进程管理实验总结Linux的进程管理实验总结1. 引言Linux中的进程管理是操作系统的核心功能之一,在实际的系统运行中起着重要的作用。
进程管理能够有效地分配系统资源、管理进程的运行状态和优先级,以及监控进程的行为。
本文将以Linux的进程管理实验为主题,分步骤介绍实验过程及总结。
2. 实验目的本次实验的目的是理解Linux中进程的概念,掌握进程的创建、运行和终止的基本操作,以及进程的状态转换过程。
3. 实验环境本次实验使用的是Linux操作系统,可以选择使用虚拟机安装Linux或者使用Linux主机进行实验。
4. 实验步骤4.1 进程的创建在Linux中,可以使用系统调用fork()来创建一个新的子进程。
在实验中,可以编写一个简单的C程序来调用fork()系统调用,实现进程的创建。
具体步骤如下:(1)创建一个新的C程序文件,例如"process_create.c"。
(2)在C程序文件中,包含必要的头文件,如<stdio.h>和<unistd.h>。
(3)在C程序文件中,编写main()函数,调用fork()函数进行进程的创建。
(4)编译并运行该C程序文件,观察控制台输出结果。
实验中,可以通过观察控制台输出结果,判断新的子进程是否被成功创建。
4.2 进程的运行在Linux中,通过调用系统调用exec()可以用一个新的程序替换当前进程的执行。
可以使用exec()函数来实现进程的运行。
具体步骤如下:(1)创建一个新的C程序文件,例如"process_run.c"。
(2)在C程序文件中,包含必要的头文件和函数声明,如<stdio.h>和<unistd.h>。
(3)在C程序文件中,编写main()函数,调用execl()函数来执行一个可执行程序。
(4)编译并运行该C程序文件,观察控制台输出结果。
实验中,可以通过观察控制台输出结果,判断新的程序是否被成功执行。
Linux 操作系统基础知识概览以下是一些关于Linux 操作系统的常见知识点:1.Linux 基础:●Linux 的起源和发展历史●Linux 的主要组成部分:内核、Shell、文件系统等●常见的Linux 发行版(如Ubuntu、Debian、CentOS 等)●常用的命令行工具和基本命令(如ls、cd、mkdir、rm 等)2.用户和权限管理:●用户账户的创建和管理●用户组的概念和使用●文件和目录的权限设置和管理●sudo 权限和root 用户的重要性3.文件系统:●Linux 文件系统的层级结构●常见的文件系统类型(如ext4、XFS、Btrfs 等)●挂载和卸载文件系统●磁盘和分区管理工具(如fdisk、parted 等)4.进程管理:●进程的概念和属性●进程的创建、终止和管理●进程状态的了解和监控●进程间通信的方式(如管道、信号、共享内存等)5.网络和安全性:●网络配置和网络接口管理●网络命令和工具(如ifconfig、ping、ssh 等)●防火墙和安全性措施(如iptables、SELinux 等)●远程访问和远程管理(如SSH、SCP、rsync 等)6.软件包管理:●软件包管理系统(如apt、yum、dnf 等)●软件包的安装、升级和卸载●软件包的依赖关系和解决依赖问题●软件源和仓库的管理7.Shell 脚本编程:●Shell 脚本的基础语法和结构●变量、条件语句、循环和函数的使用●Shell 命令和管道的组合●脚本的调试和错误处理以上只是Linux 操作系统知识的一些常见方面,涵盖了基础知识、用户和权限管理、文件系统、进程管理、网络和安全性、软件包管理以及Shell 脚本编程等。
要深入学习Linux,建议进一步学习和实践这些知识点,并探索更多高级主题,如网络服务配置、系统性能优化等。
Linux命令高级技巧使用lsof命令查看打开文件和进程信息lsof命令是Linux系统中非常常用的命令之一,它用于查看系统中打开的文件和正在运行的进程相关的信息。
通过lsof命令,我们可以获取到打开文件的进程ID、文件类型、文件大小、文件位置等各种信息,从而帮助我们更好地理解系统的运行情况和排查问题。
本文将为您介绍lsof命令的高级技巧,以便您能够更加高效地利用该命令。
一、基本用法在使用lsof命令时,最简单的用法是直接输入命令本身,不加任何参数。
例如:lsof这将列出系统中所有的打开文件和进程的相关信息。
这个命令输出的结果非常详细,包含了文件的描述符、文件类型、进程ID、进程名称等信息。
如果仅对某个进程感兴趣,可以使用以下命令来筛选特定进程的信息:lsof -p <进程ID>这样就只会显示指定进程的相关信息了。
二、查看指定文件相关信息lsof命令还可以根据文件名来查找与之相关的信息。
例如,要查找名为"example.txt"的文件相关的信息,可以使用以下命令:lsof <文件名>此命令将显示与该文件相关的所有进程的信息。
为了进一步筛选结果,可以通过加上选项来指定查找的类型,如查找打开的文件、监听的端口等。
以下是一些常用的选项:1. -c:根据进程名筛选。
2. -d:根据设备文件号筛选。
3. -i:根据网络连接筛选。
4. -t:仅显示进程ID。
举例来说,要查找进程名为"nginx"的进程打开的文件信息,可以使用以下命令:lsof -c nginx类似地,要查找打开的TCP连接信息,可以使用以下命令:lsof -i TCP三、显示打开文件的描述符lsof命令默认显示打开文件的描述符(File Descriptor)。
对于理解文件是如何被处理的很有帮助。
每个进程打开的文件都会有一个唯一的描述符,它是一个非负整数。
通过描述符,我们可以了解文件在进程中的位置、偏移量等信息。
linux 进程注入原理进程注入是指将代码注入到另一个进程中,使其在目标进程中执行。
在Linux系统中,进程注入是一种常见的技术,它可以在不影响目标进程的情况下,向其添加新的功能或修改其行为。
本文将介绍Linux进程注入的原理、分类、实现方式以及安全风险,帮助读者更好地理解和应用该技术。
一、进程注入的原理Linux系统中的进程是由内核管理的,每个进程都有自己的地址空间和资源使用情况。
进程注入技术利用了Linux系统的这种特性,通过将代码注入到目标进程的地址空间中,使其在目标进程中执行。
具体来说,进程注入的过程可以分为以下几个步骤:1. 找到目标进程的地址空间首先需要找到目标进程的地址空间,通常可以通过读取系统信息、使用工具探测或者调试器辅助等方法来实现。
2. 将代码加载到目标进程的地址空间中将需要注入的代码加载到目标进程的地址空间中,可以使用系统调用、内存映射或者直接写入等方法来实现。
3. 修改目标进程的执行流程在目标进程中加载代码后,需要修改其执行流程,使其能够执行注入的代码。
这通常需要修改目标进程的代码或数据段,使其能够跳转到注入的代码处执行。
二、进程注入的分类根据注入方式的不同,可以将进程注入分为动态注入和静态注入两种类型。
动态注入是指在目标进程运行时,将代码注入到其地址空间中,使其执行。
而静态注入则是将需要注入的代码与目标进程的二进制文件一起编译或链接,使其成为目标进程的一部分。
三、实现方式1. 使用系统调用系统调用是Linux系统提供的一种接口,用于与内核进行交互。
通过系统调用可以将代码注入到目标进程中,使其执行。
常用的系统调用包括ptrace、mmap、exec等。
其中,ptrace可以用来监视目标进程的运行情况,mmap可以用来将代码加载到目标进程的地址空间中,exec可以用来替换目标进程的执行映像。
2. 使用内存映射内存映射是Linux系统提供的一种将物理内存区域映射到进程地址空间的技术。
linux 中的进程处理和控制方式Linux 是一种广泛使用的操作系统,它具有强大的进程处理和控制功能。
在 Linux 系统中,进程是进行任务的基本单位,它们可以同时运行,互相通信,共享资源,因此进程处理和控制是 Linux 系统重要的组成部分。
Linux 提供了多种方式来处理和控制进程。
以下是一些常见的方式:1. 创建新进程:在 Linux 系统中,可以通过 fork() 系统调用创建一个新的子进程。
子进程是通过复制父进程的内存空间、文件描述符和其他资源来创建的。
这样可以实现并行处理任务,提高系统的效率。
创建新进程时,可以使用 exec() 系统调用来加载一个新的程序运行。
2. 进程调度:Linux 使用调度器(scheduler)来决定哪个进程在何时执行。
调度算法会根据进程的优先级(priority)和调度策略来决定进程的执行顺序。
常见的调度策略包括先进先出(FIFO)、最短作业优先(SJF)、轮转(Round Robin)等。
通过合理的调度算法,可以提高系统的响应速度和资源利用率。
3. 进程间通信:在 Linux 中,进程之间可以通过多种方式进行通信。
其中最常用的方式是通过管道(pipe)、信号(signal)和共享内存(shared memory)来进行进程间的数据交换。
管道可以实现进程的单向通信,信号可以用于进程之间的异步通信,而共享内存可以让多个进程共享同一片内存区域,实现高效的数据交换。
4. 进程控制:Linux 提供了多个命令和系统调用来控制进程的行为。
例如,可以使用 ps 命令来查看系统中正在运行的进程,使用kill 命令发送信号终止进程,使用 nice 命令来改变进程的优先级等。
此外,还可以使用进程控制信号(Process Control Signals)来改变进程的状态,如暂停、继续、停止等。
5. 进程管理工具:Linux 提供了一些进程管理工具来帮助用户更方便地处理和控制进程。
linux里的进程简介
【小鸟云计算教程】
/sbin/init 内核启动的第一个用户级进程,引导用户空间服务[kthreadd] 内核线程管理
[migration/0] 用于进程在不同的CPU间迁移
[ksoftirqd/0] 内核调度/管理第0个CPU软中断的守护进程[migration/1] 管理多核心
[ksoftirqd/1] 内核调度/管理第1个CPU软中断的守护进程[events/0] 处理内核事件守护进程
[events/1] 处理内核事件守护进程
[cpuset] 在每个处理器上单独运行进程,通过文件系统实现[khelper] 内核帮助进程
[netns] 网络仿真器,模拟网络环境
[async/mgr] 异步加密管理进程
[pm] 包管理
[sync_supers] 特权同步,将缓冲区文件强制写入硬盘
[bdi-default] JTAG调试器默认进程
[kintegrityd/0] 内核完整性检查
[kintegrityd/1] 内核完整性检查
[kblockd/0] 管理磁盘块读写
[kblockd/1] 管理磁盘块读写
[kacpid] 高级配置和电源管理接口
[kacpi_notify] acpi进程的通知进程
[kacpi_hotplug] acpi热插拔管理
[ata/0] ATA硬盘接口管理
[ata/1] ATA硬盘接口管理
[ata_aux] ATA硬盘接口管理
[khubd] 内核的usb hub
[kseriod] 内核线程
[kswapd0] 内存回收,确保系统空闲物理内存的数量在一个合适的范围[ksmd] 作为内核中的守护进程存在,它定期执行页面扫描,识别副本页面并合并副本,释放这些页面以供它用
[aio/0] 代替用户进程管理io
[aio/1] 代替用户进程管理io
[ecryptfs-kthrea] 加密系统
[crypto/0] 提供加密解密相关函数
[crypto/1] 提供加密解密相关函数
[scsi_eh_0] scsi设备
[scsi_eh_1] scsi设备
[scsi_eh_2] scsi设备
[scsi_eh_3] scsi设备
[kpsmoused] 内核鼠标支持
[kjournald] Ext3文件系统的日志管理
[kjournald] Ext3文件系统的日志管理[flush-1:0] 释放存储在缓存区中的数据[flush-1:1] 释放存储在缓存区中的数据[flush-1:2] 释放存储在缓存区中的数据[flush-1:3] 释放存储在缓存区中的数据[flush-1:4] 释放存储在缓存区中的数据[flush-1:5] 释放存储在缓存区中的数据[flush-1:6] 释放存储在缓存区中的数据[flush-1:7] 释放存储在缓存区中的数据[flush-1:8] 释放存储在缓存区中的数据[flush-1:9] 释放存储在缓存区中的数据[flush-1:10] 释放存储在缓存区中的数据[flush-1:11] 释放存储在缓存区中的数据[flush-1:12] 释放存储在缓存区中的数据[flush-1:13] 释放存储在缓存区中的数据[flush-1:14] 释放存储在缓存区中的数据[flush-1:15] 释放存储在缓存区中的数据[flush-8:0] 释放存储在缓存区中的数据[kjournald] Ext3文件系统的日志管理[loop0] 负责对loop设备进行操作[loop1] 负责对loop设备进行操作[loop2] 负责对loop设备进行操作
[kcopyd] 内核拷贝线程
[ext4-dio-unwrit] Ext4文件系统相关线程
upstart-udev-bridge --daemon 一个守护进程,负责接收udev信息
udevd --daemon 一个守护进程,在向udev提交之前重新订制热插拔事件,从而避免各种各样的竞争条件
/usr/sbin/restorecond 用于给SELinux监测和重新加载正确的文件上下文/sbin/auditd 审计守护进程
/sbin/audispd 审计调度进程
[kauditd] 内核审核守护进程
/sbin/getty -8 38400 tty4 等待用户从tty4登录
/sbin/getty -8 38400 tty5 等待用户从tty5登录
/sbin/getty -8 38400 tty2 等待用户从tty2登录
/sbin/getty -8 38400 tty3 等待用户从tty3登录
/sbin/getty -8 38400 tty6 等待用户从tty6登录
acpid -c /etc/acpi/events -s /var/run/acpid.socket 一个用户空间的服务进程,它充当Linux内核与应用程序之间通信的接口
cron 守护进程,周期地运行用户调度的任务
/sbin/getty -8 38400 tty1 等待用户从tty1登录
X :0 -br vt7 -nolistentcpXsever
[flush-252:0] 释放存储在缓存区中的数据。