Linux自学笔记——linux进程及作业管理

内核的功用主要有进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能这几个方面,本文主要讨论linux进程及作业管理。

进程管理

进程,process,运行中程序的一个副本,且存在生命周期;

进程分为CPU bound和I/Obound。

CPU bound:CPU密集型(类似于高清视频)

I/O bound:IO密集型(编辑器等频繁IO操作)

Linux内核存储进程信息的固定格式为:task struct(结构体)

多个任务的task struct组件的链表:task list

进程创建:

在centos6上,init为初始化进程,父进程。

请求发出者(进程)都由父进程创建,然后为系统调用;

进程:fork()   clone()

IPC: Inter Process Communication

同一主机上:

signal

shm: shared memory

semerphor

不同主机上:

rpc: remote procecure call

socket:

进程调度:保存现场,恢复现场

进程运行程序,是程序的一部分

多任务:多进程同时运行

抢占式多任务

进程优先级:

0-139:

1-99:实时优先级,数字越大,优先级越高;

100-139:静态优先级,数字越小,优先级越高;

Nice值:-20,19   -20相当于100,19相当于139;

每个进程运行时间不同,linux支持抢占式多任务,当一个低优先级的程序在运行,这时有一个高优先级的运行,过段时间后这个高优先级的提前运行。

算法复杂度:Big 0 (衡量标准算法)

o(1):恒定的,无论优先级,消耗时间相同(最佳的)

o(logn):每次调度,调度程序需要从树中找出优先级最高的进程

o(n):线性的

o(n^2):抛物线机制

o(2^n):随队列深度增长

进程状态:

运行态:running

就绪态:ready

睡眠态:

可中断:interruptable

不可中断:uninterruptable

停止态:暂停于内存中,但不会被调度,除非手动启动之:stopped

僵死态:zombie

Linux系统上的进程查看及管理工具:

     在linux系统中主要的进程管理工具有:pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,job,bg,fg,nohup,nice,renice,killall,…

1.     pstree命令:

pstree - display a tree of processes

在centos6中父进程为init,而在centos7中,父进程为systemd

pstree –p:显示各进程的PID

其它用法选项可参照man手册。

2.     ps命令:process state

ps命令显示的是ps命令执行时系统上进程信息的快照,是静态的结果。

Linux运行中的内核的相关信息是通过/proc伪文件系统输出的;各进程都有一个其PID命名的子目录,每个子目录中许多文件存储了进程的相关信息。

进程文件:/proc/#

#:PID

ps - report a snapshot of the current processes.

ps [options]

选项有三种风格:

1 UNIX options, which maybe grouped and must be preceded by a dash.

2 BSD options, which maybe grouped and must not be used with a dash.

3 GNU long options, which arepreceded by two dashes.

启动进程的方式:

系统启动过程中自动启动:与终端无关的进程;

通过用户终端启动:与终端相关的进程;

常用组合之一:aux

a:所有与终端相关的进程;

x:所有与终端无关的进程;

u:以用户为中心组织进程状态信息显示;

VSZ:虚拟内存集;

RSS:Resident Size,常驻内存集;

STAT:

R:running;

S:interruptable sleeping

D:uninterruptable sleeping

T:stopped

Z:zombie

+:前台进程;

1:多线程进程;

N:低优先级进程;

<:高优先级进程;

s:session leader;

常用组合之二:-ef

-e:显示所有进程;

-f:显示完整格式的进程信息;

常用组合之三:-eFH

-F:显示额外信息

C:cpu utilization   cpu利用率

PSR:运行在哪一颗cpu之上

-H:以层级结构显示进程的相关信息;

常用组合之四:-eo,axo

o field2,field2,…:自定义要显示的字段列表,以逗号分隔;

常用的field:pid,ni,pri,psr,pcpu,stat,comm,tty,ppid,rtprio

ni:nice值;

priority:优先级;

rtprio:realtime priority,实时优先级;

3.     pgrep,pkill命令:

pgrep, pkill - look up or signalprocesses based on name and other attributes

pgrep [options] pattern

-uuid:effectiveuser;

-Uuid:readuser;

-tTERMINAL:与指定的终端相关的进程;

-l:显示进程名;

-Ppid:显示此进程的子进程;

pkill的用法与pgrep完全一样。

4.     pidof命令:根据进程名,取其id

pidof -- find the process ID of a running program.

pidof  [ program ]

5.     top命令:

top - display Linux tasks

排序:

P:以占据cpu百分比排序;

M:已占据内存百分比排序;

T:累计占用CPU时间排序;

首部信息:按以下命令可以显示或隐藏指定的信息;

uptime信息:l命令

tasks及cpu信息:t命令

内存信息:m命令

退出命令:q

修改刷新时间间隔:s

终止指定的进程:k

选项:

-d #:指定刷新时间间隔,默认为3秒;

#top –d 1:指定刷新时间为1秒刷新一次;

-b:以批次方式显示;

-n #:显示多少批次;

#top –b –n 2:以批次显示显示两批,自动退出;

6.     uptime命令:显示系统时间、运行时长及平均负载;

过去一分钟、五分钟和十五分钟的平均负载;

等待运行的进程队列的长度;

uptime - Tell how long the system has been running.

#uptime

7.     htop命令:

centos6上没有htop的安装包,我们需要手动配置epel的yum源安装htop;

htop - interactive process viewer:交互式进程查看器

选项:

-d #:指定延迟时间间隔;

-u USERNAME:仅显示指定用户的进程;

#htop –u rpc

-s COLUME:以指定字段进行排序;

子命令:

l:显示选定的进程打开的文件列表;

s:跟踪选定的进程的系统调用;

t:以层级关系显示各种进程状态;

a:将选定的进程绑定至某指定的CPU核心;

8.     vmstat命令:

vmstat - Report virtual memory statistics  显示虚拟内存状态

vmstat  [options]  [delay [count]]

proc:

r:等待运行的进程运行的任务队列的长度;

b;处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;

memory:

swpd:交换内存使用总量;

free:空闲的物理内存总量;

buffer:用于buffer的内存的总量;

cache:用于cache的内存总量;

swap:

si:数据进入swap中的数据速率(kb/s)

so:数据离开swap的速率(kb/s)

io:

bi:从块设备读入数据到系统的速度(kb/s)

bo:保存数据至块设备的速率(kb/s)

system:

in:interrupts,中断速率;

cs:context switch,上下文切换的速率;

cpu:

us:user space;

sy:system;

id:idle;

wa:wait;

st:stolen;

选项:

-s:显示内存统计数据;

#vmstat 2 6          每两秒显示一次,显示六次退出;

9.     pmap命令:

pmap - report memory map of a process显示一个进程的内存映射

pmap [options] pid [...]

-x:显示详细信息的格式;

另一种查看方式:cat /proc/PID/maps

10.glances命令:

glances - A cross-platform curses-based monitoring tool      一个跨平台的多视窗根基的监控工具

glances [-bdehmnrsvyz1]  [-B  bind] [-c  server]  [-C conffile] [-p port] [-P password]

[--password] [-trefresh] [-f file] [-o output]

#glances

按“h”帮助选项:

常用选项:

-b:以byte为单位显示网上数据速率;

-d:关闭磁盘I/O模块;

-m:关闭mount模块;

-t #:刷新时间间隔;

-1:每个CPU的相关数据单独显示;

-o {HTML|CSV}:输出格式;

-f /PATH/TO/SOMEWHERE:设定输出文件的位置;

C/S模式下运行glances命令:

服务模式:

glances –s -BIPADDR

IPADDR:本机的某地址,用于监听;

客户端模式:

glances –c IPADDR

IPADDR:是远程某服务器的地址;

11.dstat命令:

- versatile tool for generating system resource statistics    显示系统资源状态的通用工具

dstat [-afv] [options..] [delay [count]]

常用选项:

-c, --cpu:显示cpu相关信息;

-C #,#,…,total

-d,--disk:显示磁盘的相关信息;

-D sda,sdb,…,total

-g:显示page相关的速率数据;

-m:memory的相关统计数据;

-n:interface的相关统计数据;

-p:显示process的相关统计数据;

-r:显示io请求的相关统计数据;

-s:显示swapped的相关统计数据;

-y:显示系统相关数据,包括中断和进程切换;

--tcp:显示tcp的相关数据

--udp:显示udp的相关数据

--raw:显示raw的相关数据

--socket:显示套接字的相关数据

--ipc:显示进程通信相关的速率数据

--top-cpu:显示最占用cpu的进程;

--top-io:最占用io的进程;

--top-mem:最占用内存的进程;

--top-lantency:延迟最大的进程;

用于向进程发送信号,以实现对进程的管理;

显示当期系统可用信号:

12.kill 命令:

kill- terminate a process

用于向进程发送信号,以实现对进程的管理;

显示当期系统可用信号:

kill –l [signal]

每个信号的标识有三种:

1)         信号的数字标识;

2)         信号的完整名称;

3)         信号的简写名称;

向进程发送信号:

kill  [-s signal|-SIGNAL]  pid...

常用信号:

1)         SIGHUP:无须关闭进程而让其重读配置文件;

2)         SIGINT:终止正在运行的进程,相当于ctrl+c;

9)         SIGKILL:杀死运行中的进程;

15)     SIGTERM:中止正在运行中的进程;

18)     SIGCONT:继续运行指定进程;

19)   SIGSTOP:暂停进程;

示例:启用httpd服务,对此进程进行管理;

1.     启用httpd服务,检查80端口是否处于监听状态。

2.     查看httpd进程;

3.     杀死运行中的pid为3099的进程,并查看结果;

#kill -9 3099

4.     默认信号为15,用下面的方法可以中止信号;

或者

13.kllall命令:

killall - kill processes by name

killall  [-SIGNAL]  program

示例:禁用httpd服务;

Linux系统作业控制:

job:

前台作业(foregroud):通过终端启动后,且启动后会一直占据终端;

后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端)

如何让作业运行于后台?

1)运行中的作业

Ctrl+z

注意:送往后台后,作业会转为停止态;

2)尚未启动的作业

#COMMAND &

注意:此类作业虽然被送往后台,但其依然与终端相关;如果希望把送网后台的作业剥离与终端的关系;

#nohup COMMAND &

查看所有作业:

#jobs

可实现作业控制的常用命令:

# fg [[%]JOB_NUM]:把指定的作业调回前台;

# bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行;但是此作业必须支持后台运行;

# kill %JOB_NUM:终止指定的作业,kill作业号的%不可以省略;

调整进程的优先级:

可通过nice值调整的优先级范围:100-139;

分别对应于:-20,19

进程启动时,其nice值默认为0,其优先级是120;

nice命令:

以指定的nice值启动并运行命令

# nice  [OPTION] [COMMAND [ARGU]...]

选项:

-n NICE

注意:仅管理员可调低nice值;

renice命令:

# renice  [-n] NICE  PID...

查看Nice值和优先级:

ps  axo  pid, ni, priority, comm

时间: 2024-08-11 13:38:55

Linux自学笔记——linux进程及作业管理的相关文章

Linux自学笔记——linux文件系统

Linux的文件系统 根文件系统(rootfs),内核挂载的第一个文件系统,在启动流程的这一篇文章里有提到: LSB,FHS(Filesystem  Herirache Standard) 常用的文件系统目录:/etc,/usr,/var,/root/,/home,/dev 目录介绍:(以下截图很多是目录内容的部分截图) /boot:引导文件存放目录,内核文件(vmlinuxz).引导加载器(bootloader,grub)都存放于此目录: /bin:供所有用户使用的基本命令:不能关联至独立分区

Linux自学笔记——Linux网络基础、命令及属性配置

网络对于Linux来说不可或缺的一部分,本文主要对linux网络的基础知识,常用配置命令以及linux配置文件的属性等等作一个总结. 计算机网络: TCP/IP协议栈: TCP/IP分为4层,分别为应用层,传输层,网络互连层,主机到网络层,不同于OSI,他将OSI中的会话层.表示层规划到应用层,把数据链路层和物理层划分给主机到网络层. OSI,Open System Interconnection,开放式系统互联,国际化标准组织ISO制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描

Linux自学笔记——Linux周期性计划任务

未来的某时间点执行一次任务:at,batch 周期性运行某任务:crontab 执行结果:会通过邮件形式发送给用户: 本地邮件服务: smtp:simple mail transmission protocol: pop3:post office procotol: imap4:internet mail access procotol: mail命令: mailx - send and receive Internet mail: MUA:mail user agent,用户收发邮件的工具程序

linux自学笔记--linux网络配置、基础网络命令

1.网络配置 /etc/sysconfig/net-script/ifcfg-* DEVICE:接口名 UUID:设备唯一标示 HWADDR:网卡地址 ONBOOT:是否开机自启 BOOTPROTO:static|none|dhcp TYPE:Ethernet|Bridge DNS1:dns地址 PEERDNS:如果为dhcp模式,是否自动分配dns地址,覆盖手动 IPADDR:ip地址 NETMASK:子网掩码 GATEWAY:网关地址 2.常用网络命令 ip: ip link show ip

【转载】linux内核笔记之进程地址空间

原文:linux内核笔记之进程地址空间 进程的地址空间由允许进程使用的全部线性地址组成,在32位系统中为0~3GB,每个进程看到的线性地址集合是不同的. 内核通过线性区的资源(数据结构)来表示线性地址区间,线性区是由起始线性地址,长度和一些访问权限来描述的.线性区的大小为页框的整数倍,起始地址为4096的整数倍. 下图展示了x86 Linux 进程的地址空间组织结构: 正文段 .text ,这是CPU执行的机器指令部分.通常正文段是共享的,而且是只读的,以防止程序修改其自身的指令. 数据段 .d

Linux学习笔记033_11进程

ps:(process information,静态的) 显示进程信息,不加参数显示当前终端的进程 a:包括所有终端的进程 x:不属于任何终端的进程,和任何用户无关系的进程 u:显示出进程的拥有人 f:显示进程的附属关系(依赖关系,父子进程) USER:进程的拥有人 PID:进程ID,默认用进程ID排序 VSZ:程序在运行时调用多少虚拟内存 RSS:真实内存 TTY:?不属于任何终端,进入终端之前就运行 STAT:状态,s为睡眠 TIME:进程持续时间 COMMAND:运行这个进程的指令 ps

Linux自学笔记——LVM2的创建与管理

LVM2,Logical VolumeManager,逻辑卷管理,它是linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在linux 2.4内核上实现.Linux用户安装Linux操作系统时遇到一个常见的难以决定的问题就是如何正确的评估各分区的大小,已分配合适的硬盘空间.普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以不能同时放到别的磁盘上.而遇到出现某

Linux 自学笔记(一)

    Linux系统简介 UNIX与Linux发展史: 1965年,由MIT,GE,AT&T贝尔实验室联合开发multics项目.后由于项目过于复杂,项目进度落后于计划,最终宣告失败. 1969年,贝尔实验室的工程师肯.汤姆森在DEC的机器上开发出了UNIX系统. 1971年,丹尼斯.里奇发明了C语言,并在1973年,用C语言把UNIX系统进行了重新编写,这为UNIX系统的可移植打下了基础. TCP/IP协议的开发,并捆绑在UNIX上,使得UNIX的发展和推广启到很大的作用. UNIX的主要发

Linux自学笔记——Selinux简介

SElinux是美国国家安全局(NSA)对于强制访问控制的实现,是linux历史上最杰出的新安全子系统.NSA是在Linux社区的帮助下开发的一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在它的任务中所需要的文件.SElinux默认安装在Fedora和RedHat Enterprise Linux上,也可以作为其他发行版上容易安装的包得到. DAC,自主访问控制,任何程序对其资源享有完全的控制权,每个用户或进程可以随意修改自己的文件的权限,将其他权限授予给其他人而具有任意的访问权