linux进程及作业管理实验,Linux 进程及作业管理(示例代码)
Linux 进程及作业管理
概述:
一、进程的相关概念:
1.相关定义:内核的功用: 进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等;
通俗的来说进程是运行起来的程序。唯一标识进程的是进程描述符(PID),在linux内核中是通过task_struck和task_list来定义和管理进程的 ;
进程 Process: 运行中的程序的一个副本,是被载入内存的一个指令集合; ˙进程ID(Process ID,PID)号码被用来标记各个进程; ˙UID、GID、和SELinux语境决定对文件系统的存取和访问权限; ˙通常从执行进程的用户来继承; ˙存在生命周期;
task struct:Linux内核存储进程信息的数据结构格式;
task list:多个任务的的task struct组成的链表;
2.进程创建:init:第一个进程 父子关系
进程:都由其父进程创建,COW(写实复制) fork(), clone()
创建过程:
1.系统首先以fock的方式复制(cow)一个与父进程相同的进程,这个进程与父进程唯一的差别就是PID不同,但是这个进程还会多一个PPID的参数,PPID就是父进程的程序识别码PID; 2.然后新产生的进程开始加载实际要运行的程序进行执行。
3.进程优先级:进程的优先级是用数字0-139来表示的,分为两类: 99-1:实时优先级,由内核维护(数字越大,优先级越高)
100-139:静态优先级,使用nice值来调整(数字越小,优先级越高);Nice值: -20,19对应静态优先级100-139
Big O: 时间复杂度,用时和规模的关系 O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)
4.进程内存:Page Frame: 页框,用存储页面数据,存储Page 4k;
LRU:Least Recently Used 近期最少使用算法,释放内存;
注:内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU, 操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
物理地址空间和线性地址空间;
MMU(内存管理单元):负责转换线性和物理地址
注:MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU) 中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址, 以及 提供硬件机制的内存访问授权,多用户多进程操作系统。
5.IPC: 进程间通信 Inter Process Communication在计算机网络体系中,主机与主机之间的通信,实质上是主机进程与主机进程之间的通信,也就是进程间的通信;
同一主机上 signal:信号指令; shm: shared memory 共享内存空间 semophore:信号量,一种计数器
不同主机上: rpc: remote procedure call socket: 套接字,IP和端口号
6.Linux内核:抢占式多任务
7.进程类型:
根据进程与终端的关系可以分为:守护进程: daemon,在系统引导过程中启动的进程,和终端无关的进程;
前台进程:跟终端相关,通过终端启动的进程; 注意:两者可相互转化
8.进程状态:
进程被内核调度的过程中的状态可以分为:运行态:running
就绪态:ready
睡眠态:
可中断:interruptable 不可中断:uninterruptable,通常是指被IO阻塞的过程,等待IO满足之前无法继续运行。
停止态:stopped,暂停于内存中,但不会被调度,除非手动启动;
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
9.进程的分类:CPU-Bound:CPU密集型,非交互;
IO-Bound:IO密集型,交互;
根据在linux不同模式下运行分为:
核心态:这类进程运行在内核模式下,执行一些内核指令(Ring 0)。 用户态:这类进程工作在用户模式下,执行用户指令(Ring 3)。
如果用户态的进程要执行一些核心态的指令,此时就会产生系统调用,系统调用会请求内核指令完成相关的请求,就执行的结果返回给用户态进程。
10.进程与线程的关系:进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位
线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。
进程——资源分配的最小单位,线程——程序执行的最小单位
从函数调用上来说,进程创建使用fork()操作;线程创建使用clone()操作
参考资料:《Linux内核设计与实现》《深入理解Linux内核》
二、进程的系统管理工具:Linux系统状态的查看及管理工具: pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill pkill, job, bg, fg, nohup
CentOS 5:SysV init
CentOS 6:upstart
CentOS 7:systemd /sbin/init
1.pstree命令:
pstree-display a tree of processes(显示查看进程树)
以下为CentOS 6 和 CentOS 7 的区别[[email protected] ~]# pstree
init─┬─abrtd #可以看到都是有init生成的
├─acpid
├─atd
├─auditd───{auditd}
├─automount───4*[{automount}]
├─bonobo-activati───{bonobo-activat}
├─clock-applet
├─console-kit-dae───63*[{console-kit-da}]
├─crond
├─cupsd
├─2*[dbus-daemon]
├─2*[dbus-launch]
├─devkit-power-da
├─dhclient
├─gconf-im-settin
├─gconfd-2[[email protected] ~]# pstree
systemd─┬─NetworkManager─┬─2*[dhclient]
│ └─2*[{NetworkManager}]
├─2*[abrt-watch-log]
├─abrtd
├─alsactl
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─chronyd
├─crond
├─cupsd
├─dbus-daemon
├─gssproxy───5*[{gssproxy}]
├─login───bash
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
2./proc:内核中的状态信息;
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
内核参数: 可设置其值从而调整内核运行特性的参数,在/proc/sys/下; 状态变量:其用于输出内核中统计信息或状态信息,仅用于查看;
参数:模拟成文件系统;
进程: /proc/#: #:PID
2.启动进程的方式:
系统启动过程中自动启动:与终端无关的进程;
用户通过终端启动:与终端相关的进程
三、显示系统当前进程的运行情况
ps: process state
ps-report a snapshot of the current processes
1.使用ps来查看进程信息语法:ps[OPTION]...
支持三种选项: UNIX选项 如 -a BSD选项 如 a GUN选项 如 --help
选项和参数
默认显示当前终端中的进程; a 所有与终端相关的进程; x 所有与终端无关的进程;u 显示进程所有者的信息;
f 显示进程的父进程; o属性… 选项显示定制的信息:
示例:如下[[email protected] 1]# ps a
PID TTY STAT TIME COMMAND
2024 tty2 Ss+ 0:00 /sbin/mingetty /dev/tty2
2026 tty3 Ss+ 0:00 /sbin/mingetty /dev/tty3
2028 tty4 Ss+ 0:00 /sbin/mingetty /dev/tty4
2030 tty5 Ss+ 0:00 /sbin/mingetty /dev/tty5
2032 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6
2105 tty1 Ss+ 0:00 -bash
3922 pts/1 Ss+ 0:00 /bin/bash
4864 pts/2 Ss 0:00 -bash
5142 pts/2 R+ 0:00 ps a[[email protected] 1]# ps
PID TTY TIME CMD
4864 pts/2 00:00:00 bash
5144 pts/2 00:00:00 ps[[email protected] 1]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19344 1632 ? Ss 08:27 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 08:27 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 08:27 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 08:27 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 08:27 0:00 [stopper/0]
root 6 0.0 0.0 0 0 ? S 08:27 0:00 [watchdog/0]
root 7 0.0 0.0 0 0 ? S 08:27 0:18 [events/0]
root 8 0.0 0.0 0 0 ? S 08:27 0:00 [events/0]
root 9 0.0 0.0 0 0 ? S 08:27 0:00 [events_long/0]
root 10 0.0 0.0 0 0 ? S 08:27 0:00 [events_power_ef]
root 11 0.0 0.0 0 0 ? S 08:27 0:00 [cgroup]
root 12 0.0 0.0 0 0 ? S 08:27 0:00 [khelper]
2.常用组合之一:auxVSZ: Virtual memory SiZe,虚拟内存集,线性内存RSS: ReSidentSize, 常驻内存集STAT:进程状态 R:running S: interruptable sleeping 可中断睡眠 D: uninterruptable sleeping 不可中断睡眠 T: stopped 停止状态 Z: zombie 僵死态 +: 前台进程 l: 多线程进程 N:低优先级进程 <: s: session leader>
3.常用组合之二:-ef
-e: 显示所有进程
-f: 显示完整格式程序信息[[email protected] 1]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:27 ? 00:00:01 /sbin/init
root 2 0 0 08:27 ? 00:00:00 [kthreadd]
root 3 2 0 08:27 ? 00:00:00 [migration/0]
root 4 2 0 08:27 ? 00:00:00 [ksoftirqd/0]
root 5 2 0 08:27 ? 00:00:00 [stopper/0]
root 6 2 0 08:27 ? 00:00:00 [watchdog/0]
root 7 2 0 08:27 ? 00:00:20 [events/0]
root 8 2 0 08:27 ? 00:00:00 [events/0]
root 9 2 0 08:27 ? 00:00:00 [events_long/0]
root 10 2 0 08:27 ? 00:00:00 [events_power_ef]
root 11 2 0 08:27 ? 00:00:00 [cgroup]
root 12 2 0 08:27 ? 00:00:00 [khelper]
root 13 2 0 08:27 ? 00:00:00 [netns]
root 14 2 0 08:27 ? 00:00:00 [async/mgr]
4.常用组合之三:-eFH
-F: 显示更完整格式的进程信息
C:cpu utillization
PSR:运行于哪颗cpu之上
-H: 以进程层级格式显示进程相关信息[[email protected] 1]# ps -eFH
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 2 0 0 0 0 0 08:27 ? 00:00:00 [kthreadd]
root 3 2 0 0 0 0 08:27 ? 00:00:00 [migration/0]
root 1 0 0 4836 1632 0 08:27 ? 00:00:01 /sbin/init
root 581 1 0 2709 952 0 08:27 ? 00:00:00 /sbin/udevd -d
root 2033 581 0 2708 940 0 08:27 ? 00:00:00 /sbin/udevd -d
root 2034 581 0 2708 920 0 08:27 ? 00:00:00 /sbin/udevd -d
root 1525 1 0 6899 868 0 08:27 ? 00:00:00 auditd
root 1559 1 0 62288 1696 0 08:27 ? 00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
rpc 1610 1 0 4745 892 0 08:27 ? 00:00:00 rpcbind
dbus 1630 1 0 5559 1700 0 08:27 ? 00:00:00 dbus-daemon --system
rpcuser 1652 1 0 5838 1380 0 08:27 ? 00:00:00 rpc.statd
root 1687 1 0 47243 3360 0 08:27 ? 00:00:00 cupsd -C /etc/cups/cupsd.conf
常用组合之四:-eo axo
o field1,field2...:自定义要显示的字段,以逗号分隔;
常用的字段:pid,ni,pri,pcpu,stat,comm,tty,ppid
ni: nice值
pri: priority,优先级
psr: processor, CPU编号
rtprio: 实时优先级[[email protected] 1]# ps -eo pid,tty,ni,comm
PID TT NI COMMAND
1 ? 0 init
2 ? 0 kthreadd
3 ? - migration/0
4 ? 0 ksoftirqd/0
5 ? - stopper/0
6 ? - watchdog/0
7 ? 0 events/0
8 ? 0 events/0
9 ? 0 events_long/0
10 ? 0 events_power_ef
11 ? 0 cgroup
linux进程及作业管理实验,Linux 进程及作业管理(示例代码)相关推荐
- linux进程及作业管理实验,Linux 进程及作业管理(一)
Linux 进程及作业管理 ============================================================================== 概述: 我们在 ...
- linux中mongo的导出数据,Linux下mongodb安装及数据导入导出教程(示例代码)
Linux下mongodb安装及数据导入导出教程 #查看linux发行版本 cat /etc/issue #查看linux内核版本号 uname -r 一.Linux下mongodb安装的一般步骤 1 ...
- linux共享存储通信实验,Linux进程通信——共享存储
共享内存是进程间通信最有用的方式,也是最快的IPC形式.共享内存是说:同一块内存被映射到多个进程的地址空间.但是共享内存并不提供同步机制,因此需要互斥锁或者信号量.使用共享内存唯一需要注意的是:当前如 ...
- linux下编辑文件实验,Linux实验_修改
java资料 实验一 Linux的认识 一.实验的目的要求 通过实验,使学生初步熟悉Linux环境,了解Linux的目录结构和文件,了解Linux命令的特点,能够完成登录和密码修改工作. 二.实验内容 ...
- linux下编辑文件实验,Linux上最常用的文本编辑器vi/vim使用教程
vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.vi是"visual interfa ...
- linux简单设计与实现代码,《linux内核设计与实现》第五章(示例代码)
第五章 系统调用 一.与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层.作用: 为用户空间提供了一种硬件的抽象接口. 系统调用保证了系统的稳定和安全. 每个进程都运行在虚拟系统中,而在 ...
- linux三剑客应用到工作中,LINUX 三剑客老大(AWK) 日常工作总结(示例代码)
一.Linux 系统连接状态篇: 1.查看TCP连接状态;netstat -nat |awk '{print $6}'|sort|uniq-c|sort -rn netstat -n | awk '/ ...
- linux下计算目录文件和,统计Linux 中文件和文件夹/目录的数量(示例代码)
嗨,伙计们,今天我们再次带来一系列可以多方面帮助到你的复杂的命令. 通过操作命令,可以帮助您计数当前目录中的文件和目录.递归计数,统计特定用户创建的文件列表等. 在本教程中,我们将向您展示如何使用多个 ...
- linux ssh 时间设置,Linux下设置SSH Server设置时间链接限制(示例代码)
OpenSSH基于安全的理由,如果用户连线到SSHServer后闲置一段时间,SSH Server会在超过特定时间后自动终止SSH连线.本人习惯长时间连接,需要做如下修改: 1.打开ssh配置文件:# ...
最新文章
- R语言基础知识详解及概括
- linux mysql数据库优化_MySQL_Linux下MySQL数据库性能调优方法,以下的环境具备一定的代表性 - phpStudy...
- linux(2)- 共享内存的实现
- java ReentrantLock 实现原理
- 项目整体管理:指导和管理项目工作
- VS2017中运行第一个C#控制台应用并输出HelloWorld
- AG3 hang after click membership search
- Blazor 准备好为企业服务了吗?
- 【转载】 Asp.net Mvc 3当然也不会例
- LUCK——组合数学
- 循环执行次数 n(n+1)/2
- java适合做平台_java不适合做单机web管理平台的2大因素
- Python与Redis集群的交互
- LinkedIn第三方登录
- 历经万难,终于搭好深度学习环境[吐血总结篇,造福后人]
- 3DMAX2016破解教程
- YOLOV5 + 双目测距(python)
- OOK电路在电调天线远端控制器(RCU)中的应用
- 开放报名 | “2021 年全国人工智能大赛”正式开赛
- SEO到了岌岌可危的时刻吗?