内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
Process: 运行中的程序的一个副本,是被载入内存的一个指令集合
进程ID(Process ID,PID)号码被用来标记各个进程
UID、GID、和SELinux语境决定对文件系统的存取和访问权限
通常从执行进程的用户来继承
存在生命周期
task struct:Linux内核存储进程信息的数据结构格式
task list:多个任务的的task struct组成的链表
进程创建:
init:第一个进程
进程:都由其父进程创建,父子关系,CoW
fork(), clone()
以下两种状态是不可能发生的:
系统优先级:数字越小,优先级越高
0-139(CentOS4,5)
各有140个运行队列和过期队列
0-98,99(CentOS6)
实时优先级: 99-0 值最大优先级最高
nice值:-20到19,对应系统优先级100-139或99
Big O:时间复杂度,用时和规模的关系
O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)
# 进程优先级调整
静态优先级:100-139
进程默认启动时的nice值为0,优先级为120
只有根用户才能降低nice值(提高优先性)
# nice命令
nice [OPTION] [COMMAND [ARG]...]
# renice命令
renice [-n] priority pid...
# 查看
ps axo pid,comm,ni
同一主机:signal:信号
shm: shared memory
semaphore:信号量,一种计数器
不同主机:socket: IP和端口号
RPC: remote procedure call
MQ:消息队列,Kafka,ActiveMQ
Linux内核:抢占式多任务
进程类型:
守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程
注意:两者可相互转化
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
/proc/:内核中的状态信息
内核参数:
可设置其值从而调整内核运行特性的参数;/proc/sys/
状态变量:其用于输出内核中统计信息或状态信息,仅用于查看
参数:模拟成文件系统类型
/proc/#:
#:PID
# 里面有此进程的内核参数,内容非常不友好,不是内核开发人员看不懂
# cat cmdline # 启动此进程的命令参数
# cat mem # 查看此进程的内存参数,一般不予许查看
# cat maps # 哪些内存空间存储了哪些内容文件
进程的分类:
CPU-Bound:CPU密集型,非交互
IO-Bound:IO密集型,交互
Linux系统状态的查看及管理工具:
# pstree ps pidof pgrep top/htop
# glance pmap vmstat dstat kill
# pkill job bg fg nohup
以树状图的方式展现进程之间的派生关系。
pstree - display a tree of processes
pstree命令 以树状图的方式展现进程之间的派生关系,显示效果比较直观。
语法格式:
pstree [OPTIONS]
OPTIONS:
-a # 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示
-c # 不使用精简标示法
-G # 使用VT100终端机的列绘图字符
-h # 列出树状图时,特别标明现在执行的程序
-H PID # 此参数的效果和指定"-h"参数类似,但特别标明指定的程序
-l # 采用长列格式显示树状图
-n # 用程序识别码排序。预设是以程序名称来排序
-p # 显示程序识别码
-u # 显示用户名称
-U # 使用UTF-8列绘图字符
-V # 显示版本信息
1、获取 SSH 会话的 PID。
# pstree -p | grep ssh
|-sshd(1221)-+-sshd(2768)---bash(2770)-+-grep(2810)
| `-sshd(2807)---sshd(2808)
从上方的输出中,你可以看到 sshd 进程与分支的树形图。sshd 的主进程是 sshd(1221),另两个分支分别为 sshd(2768) 和 sshd(2807)。
2、显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。
# pstree -a
3、显示当前所有进程的进程号和进程id。
# pstree -p
通过查看进程的内核参数来进行友好的输出。
# ps - report a snapshot of the current processes.
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中。
# ps [options]
a # 选项包括所有终端中的进程
x # 选项包括不链接终端的进程
u # 选项显示进程所有者的信息
f # 选项显示进程树,相当于 --forest
k|--sort # 属性 对属性排序,属性前加- 表示倒序
o # 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem
L # 显示支持的属性列表
-C cmdlist # 指定命令,多个命令用 ,分隔
-L # 显示线程
-e # 显示所有进程,相当于-A
-f # 显示完整格式程序信息
-F # 显示更完整格式的进程信息
-H # 以进程层级格式显示进程相关信息
-u userlist # 指定有效的用户ID或名称
-U userlist # 指定真正的用户ID或名称
-g gid groupname # 指定有效的gid或组名称
-G gid groupname # 指定真正的gid或组名称
-p pid # 显示指pid的进程
--ppid pid # 显示属于pid的子进程
-M # 显示SELinux信息,相当于Z
# 查询你拥有的所有进程
ps -x
#显示指定用户名(RUID)或用户ID的进程
ps -fU apache
ps -fU 48
# 显示指定用户名(EUID)或用户ID的进程
ps -fu wang
ps -fu 1000
# 查看以root用户权限(实际和有效ID)运行的每个进程
ps -U root -u root
# 列出某个组拥有的所有进程(实际组ID:RGID或名称)
ps -fG nginx
列出有效组名称(或会话)所拥有的所有进程
ps -fg mysql
ps -fg 27
# 显示指定的进程ID对应的进程
ps -fp 1234
# 以父进程ID来显示其下所有的进程,如显示父进程为1234的所有进程
ps -f --ppid 1234
# 显示指定PID的多个进程
ps -fp 1204,1239,1263
# 要按tty显示所属进程
ps -ft pts/0
以进程树显示系统中的进程如何相互链接
ps -e --forest
# 以进程树显示指定的进程
ps -f --forest -C sshd
ps -ef --forest | grep -v grep | grep sshd
# 要显示一个进程的所有线程,将显示LWP(轻量级进程)以及NLWP(轻量级进程数)列
ps -fL -C nginx
# 要列出所有格式说明符
ps L
# 查看进程的PID,PPID,用户名和命令
ps -eo pid,ppid,user,cmd
自定义格式显示文件系统组,ni值开始时间和进程的时间
ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime
# 使用其PID查找进程名称:
ps -p 1244 -o comm=
# 要以其名称选择特定进程,显示其所有子进程
ps -C sshd,bash
# 查找指定进程名所有的所属PID,在编写需要从std输出或文件读取PID的脚本时这个参数很有用
ps -C httpd,sshd -o pid=
# 检查一个进程的执行时间
ps -eo comm,etime,user | grep nginx
# 查找占用最多内存和CPU的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
# 显示安全信息
ps -eM
ps --context
# 使用以下命令以用户定义的格式显示安全信息
ps -eo euser,ruser,suser,fuser,f,comm,label
# 使用watch实用程序执行重复的输出以实现对就程进行实时的监视,如下面的命令显示每秒钟的监视
watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'
选项说明:
a:所有与终端相关的进程
TIME: 占用内存的时间
COMMAND:启动此子进程的命令
[] 内核线程
x:所有与终端无关的进程
u:以用户为中心组织进程状态信息显示
输出信息:
USER:用户
PID:进程ID
%CPU:使用CPU的百分比
%MEM:使用内存的百分比
VSZ:虚拟内存集;占用的虚拟内存大小
RSS:Resident Size,常驻内存集;
STAT:
R:running
S:interruptable sleeping 可中断睡眠
D:uninterruptable sleeping 不可中断睡眠
T:Stopped 停止态
Z:zombie 僵死态,任何进程再被回收前。是一个过渡态,停止到回收之间的过渡态
+:前台进程 运行在终端之上的,占用命令提示符
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader 会话主导者/会话引领者
aux 示例:
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.6 193640 6664 ? Ss 10:48 0:02 /usr/lib/sys
root 2 0.0 0.0 0 0 ? S 10:48 0:00 [kthreadd]
选项说明:
-e:显示所有进程 相当于 ax,但这是 unix 风格的
# ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
2 ? S 0:00 [kthreadd]
# ps -e
PID TTY TIME CMD
1 ? 00:00:02 systemd
2 ? 00:00:00 kthreadd
-f:显示完整格式的进程信息
# ps -f
UID PID PPID C STIME TTY TIME CMD
root 7615 7607 0 09:04 pts/1 00:00:00 -bash
root 8195 7615 0 09:29 pts/1 00:00:00 ps -f
-ef 示例:
# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 07:18 ? 00:00:02 /usr/lib/systemd/systemd --switched-root --sy
root 2 0 0 07:18 ? 00:00:00 [kthreadd]
进程一般是从 1 开始的,0 代表过渡
CMD 启动此进程的命令
TIME 此进程的运行时间
选项说明:
-e:显示所有进程 相当于 ax,但这是 unix 风格的
-F:显示完整格式的进程信息
C: cpu utilization
PSR:运行于哪颗CPU之上
-H:以层级结构显示进程的相关信息
# ps -eF
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 48410 6696 2 07:18 ? 00:00:02 /usr/lib/systemd/systemd --sw
root 2 0 0 0 0 3 07:18 ? 00:00:00 [kthreadd]
-eFH 示例:
# ps -eFH # 通过缩进来看进程父子关系
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 2 0 0 0 0 3 07:18 ? 00:00:00 [kthreadd]
root 6266 1 0 24140 2464 3 07:19 ? 00:00:00 login -- root
root 7447 6266 0 28859 1984 3 08:29 tty1 00:00:00 -bash
root 6269 1 0 89548 29140 0 07:19 ? 00:00:01 /usr/bin/python -Es /usr/sb
root 6305 1 0 191158 11140 2 07:19 ? 00:00:00 /usr/sbin/NetworkManager --
root 6605 6305 0 26839 5456 3 07:19 ? 00:00:00 /sbin/dhclient -d -q -sf
root 8072 6305 0 26839 5452 2 09:05 ? 00:00:00 /sbin/dhclient -d -q -sf
root 6847 1 0 143457 19116 0 07:19 ? 00:00:01 /usr/bin/python2 -Es /usr/s
root 6848 1 0 28189 4320 3 07:19 ? 00:00:00 /usr/sbin/sshd -D
root 7464 6848 0 39154 5536 2 08:29 ? 00:00:00 sshd: root@pts/0
root 7468 7464 0 28860 2072 1 08:29 pts/0 00:00:00 -bash
root 7607 6848 0 39154 5540 2 09:04 ? 00:00:00 sshd: root@pts/1
root 7615 7607 0 28860 2060 1 09:04 pts/1 00:00:00 -bash
root 8295 7615 0 38874 1952 0 10:03 pts/1 00:00:00 ps -eFH
root 7611 6848 0 39154 5536 2 09:04 ? 00:00:00 sshd: root@pts/2
root 7631 7611 0 28860 1992 3 09:05 pts/2 00:00:00 -bash
选项说明:
o:属性...选项显示定制的信息 pid、cmd、%cpu、%mem
x:选项包括不链接终端的进程
-e:显示所有进程 相当于 ax,但这是 unix 风格的
o 一定要写在后面,因为后面需要带参数
o field1, field2,...:自定义要显示的字段列表,以逗号分隔
常用的field:pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio
ppid:父进程进程号
ni:nice值; -20~+19 值越小,优先级越高 让出优先级
priority:priority, 优先级
rtprio:real time priority,实时优先级
pgrep, pkill 命令主要是实现进程过滤的。
pgrep pkill - look up or signal processes based on name and other attributes
语法格式:
pgrep [options] pattern
pkill [options] pattern
常用选项:
-u uid # effective user 生效者,显示指定用户的进程,以谁的身份启动进程的
-U uid # read user 真正发起运行命令者
-t TERMINA # 与指定的终端相关的进程
-l # 显示进程名
-a # 显示完整格式的进程名
-P pid # 显示此进程的子进程
示例:
# pgrep -U postfix
7010
7649
# ps aux | grep postfix
root 6994 0.0 0.2 89544 2160 ? Ss 07:19 0:00 /usr/libexec/postfix/master -w
postfix 7010 0.0 0.4 89716 4092 ? S 07:19 0:00 qmgr -l -t unix -u
postfix 7649 0.0 0.4 89648 4068 ? S 09:05 0:00 pickup -l -t unix -u
root 8352 0.0 0.0 112708 972 pts/1 S+ 10:14 0:00 grep --color=auto postfix
pidof命令:根据进程名,取其pid。
按确切的程序名称:/sbin/pidof 进行PID打印。
语法格式:
# pidof bash
示例:
# pidof sshd
7087 6825
以动态方式实时查看进程信息。
top - display Linux processes
栏位信息显示:
us 用户空间
sy 内核空间
ni 调整ni时间
id 空闲百分比
wa 等待I/O的时间百分比
hi 硬件中断
si 软件中断
st 被虚拟机偷走的时间
top 的内置命令:
在使用top以后,可以使用内置命令进行更细致查看和排序。
排序:
P:以占据的CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+
首部信息显示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m
退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W
命令选项:
-d # # 指定刷新时间间隔,默认为3秒
-b # 以批次方式显示
-n # # 显示多少批次; top -b -n 1
# uptime
10:27:58 up 6 min, 1 user, load average: 0.00, 0.08, 0.06
安装htop:
# yum -y install epel-release
# yum -y update
# yum install htop
语法格式:
htop [OPTIONS]
常用选项:
-d # # 指定延迟时间间隔
-u UserName # 仅显示指定用户的进程
-s COLUME # 以指定字段进行排序
内置命令:
l # 显示选定的进程打开的文件列表
s # 跟踪选定的进程的系统调用
t # 以层级关系显示各进程状态
a # 将选定的进程绑定至某指定的CPU核心
vmstat - Report virtual memory statistics
语法格式:
vmstat [options] [delay [count]]
示例:
[root@LeeMumu ~]# vmstat 2 3 # 每两秒显示一次,显示三次后停止
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 692408 2108 162784 0 0 1 0 6 7 0 0 100 0 0
0 0 0 692364 2108 162788 0 0 0 0 28 29 0 0 100 0 0
0 0 0 692364 2108 162788 0 0 0 0 22 23 0 0 100 0 0
选项:
-s:显示内存统计数据
[root@LeeMumu ~]# vmstat -s
995924 K total memory
139104 K used memory
96456 K active memory
71260 K inactive memory
691912 K free memory
输出信息含义:
procs(进程)
r:等待运行的进程的个数;CPU上等待运行的任务的队列长度;
The number of runnable processes (running or waiting for run time).
b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;
The number of processes in uninterruptible sleep.
I/O 次数很多的情况下,会造成 b 次数会比较大
memory(内存)
swpd:交换内存使用总量;
the amount of virtual memory used.
0 代表交换内存未使用
free:空闲的物理内存总量;
the amount of idle memory.
buffer:用于buffer的内存总量;
the amount of memory used as buffers.
cache:用于cache的内存总量;
the amount of memory used as cache.
注意:swpd 是物理硬盘虚拟出来的,如果 swap 被启用了,且述职较大时,就需要对内存或服务器进行扩展,因为 swap 性能太差。
swap:取时间内的平均值
si:数据进入swap中的数据速率(kb/s)
Amount of memory swapped in from disk (/s)
so:数据离开swap的速率(kb/s)
Amount of memory swapped in from disk (/s)
注意:如果 swap 的 si 和 so 数值比较大,说明物理内存和虚拟内存在频繁的交换数据,此时需要对 物理内存进行扩容;如果数值不大,则影响较小。
io
如果程序频繁的需要调用数据的话,此数值会比较大。
bi:从块设备读入数据到系统的速度(kb/s)
Blocks received from a block device (blocks/s).
bo:保存数据至块设备的速率(kb/s)
Blocks sent to a block device (blocks/s).
system
in:interrupts,中断速率;
The number of interrupts per second, including the clock.
cs:context switch, 上下文 切换的速率;
进程被内核调用的频率
进程多,CPU弱的话,此数值会比较大
The number of context switches per second.
cpu
us:user space
Time spent running non-kernel code. (user time, including nice time)
sy:system
Time spent running kernel code. (system time)
id:idle
Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa:wait
Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: stolen
Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
报告内存映射表(进程可能使用的是不连续得内存空间,通过映射可获取实际使用的内存位置)。
pmap - report memory map of a process
语法格式:
# pmap [options] pid [...]
-x:显示详细格式的信息;
示例:
[root@LeeMumu ~]# pmap 1 # 1 号进程所使用的内存映射
1: /usr/lib/systemd/systemd --switched-root --system --deserialize 22
000055d8c0255000 1412K r-x-- systemd
000055d8c05b5000 140K r---- systemd
... ...
另一种查看方式:
# cat /proc/PID/maps
示例:
# cat /proc/1/maps
未部署系统监控软件前,glances 是一个比较不错的临时监控服务器的命令。
glances - A cross-platform curses-based monitoring tool
安装:
http://blog.chinaunix.net/uid-777398-id-4776759.html
内建命令:
a Sort processes automatically
l Show/hide logs
c Sort processes by CPU%
b Bytes or bits for network I/O
m Sort processes by MEM%
w Delete warning logs
p Sort processes by name
x Delete warning and critical logs
i Sort processes by I/O rate
1 Global CPU or per-CPU stats
d Show/hide disk I/O stats
h Show/hide this help screen
f Show/hide file system stats
t View network I/O as combination
n Show/hide network stats
u View cumulative network I/O
s Show/hide sensors stats
q Quit (Esc and Ctrl-C also work)
y Show/hide hddtemp stats
常用选项:
-b:以Byte为单位显示网卡数据速率
-d:关闭磁盘I/O模块
-m:关闭mount模块
-n:关闭network模块
-t #:刷新时间间隔
-1:每个cpu的相关数据单独显示
-o {HTML|CSV}:输出格式
-f /PATH/TO/SOMEDIR:设定输出文件的位置
C/S模式下运行glances命令:
服务模式:
glances -s -B IPADDR
IPADDR:本机的某地址,用于监听
客户端模式:
glances -c IPADDR
IPADDR:是远程服务器的地址
dstat命令:系统资源统计,代替vmstat,iostat 。
dstat - - versatile tool for generating system resource statistics
语法格式:
dstat [-afv] [options..] [delay [count]]
常用选项:
-c, --cpu:显示cpu相关信息
-C #,#,...,total
-d, --disk:显示磁盘的相关信息
-D sda,sdb,...,tobal
-g:显示page相关的速率数据
-m:Memory的相关统计数据
-n:Interface的相关统计数据
-p:显示process的相关统计数据
-r:显示io请求的相关的统计数据
-s:显示swapped的相关统计数据
--tcp
--udp
--raw
-socket
--ipc
--top-cpu:显示最占用CPU的进程
--top-io:最占用io的进程
--top-mem:最占用内存的进程
--top-lantency:延迟最大的进程
示例:
[root@LeeMumu ~]# dstat 2 3 # 每 2 秒显示一次,共显示三次
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 100 0 0 0|5691B 4278B| 0 0 | 0 0 | 26 31
0 0 100 0 0 0| 0 0 | 66B 614B| 0 0 | 43 63
0 0 100 0 0 0| 0 0 | 66B 366B| 0 0 | 39 59
0 0 100 0 0 0| 0 0 | 96B 366B| 0 0 | 40 61
用于向进程发送信号,以实现对进程的管理。
kill - terminate a process
显示当前系统可用信号:
# kill -l [signal]
每个信号的标识方法有三种:
1) 信号的数字标识; 1
2) 信号的完整名称; SIGHUP
3) 信号的简写名称; HUP
只有管理员才能 kill 任何进程。
[root@LeeMumu ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
... ...
[root@LeeMumu ~]# kill -l 1
HUP
向进程发信号:
# kill [-s signal|-SIGNAL] pid...
1)SIGHUP # 无须关闭进程而让其重读配置文件
2)SIGINT # 终止正在运行的进程,相当于Ctrl+c
9)SIGKILL # 杀死运行中的进程;荼毒,残暴杀害 迫不得已使用 9 号,会造成文件损坏
15)SIGTERM # 终止运行中的进程;人道杀害 一般使用 15 号
18)SIGCONT # 继续,唤醒
19)SIGSTOP # 停止状态
[root@neo ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
# ctrl+z 相当于对进程送入到停止状态,相当于发送一个 18 号信号
# fg 可进行对文件进行编辑
[root@LeeMumu ~]# vi abc.txt
[1]+ Stopped vi abc.txt
[root@LeeMumu ~]# ps aux | grep vi
root 6205 0.0 0.6 99568 6084 ? Ss 10:21 0:00 /usr/bin/VGAuthService -s
root 9597 0.0 0.1 126180 1672 pts/1 T 21:34 0:00 vi abc.txt
root 9599 0.0 0.0 112712 972 pts/1 S+ 21:34 0:00 grep --color=auto vi
[root@LeeMumu ~]# yum install httpd
[root@LeeMumu ~]# systemctl start httpd.service
[root@LeeMumu ~]# ps aux | grep httpd
root 9541 2.0 0.5 228276 5104 ? Ss 21:25 0:00 /usr/sbin/httpd -DFOREGROUND
apache 9542 0.0 0.3 228276 2988 ? S 21:25 0:00 /usr/sbin/httpd -DFOREGROUND
apache 9543 0.0 0.3 228276 2988 ? S 21:25 0:00 /usr/sbin/httpd -DFOREGROUND
apache 9544 0.0 0.3 228276 2988 ? S 21:25 0:00 /usr/sbin/httpd -DFOREGROUND
apache 9545 0.0 0.3 228276 2988 ? S 21:25 0:00 /usr/sbin/httpd -DFOREGROUND
apache 9546 0.0 0.3 228276 2988 ? S 21:25 0:00 /usr/sbin/httpd -DFOREGROUND
root 9548 0.0 0.0 112708 976 pts/1 S+ 21:25 0:00 grep --color=auto httpd
[root@LeeMumu ~]# kill -1 9541
[root@LeeMumu ~]# kill -HUP 9541
[root@LeeMumu ~]# kill -SIGHUP 9541
[root@LeeMumu ~]# kill -s SIGHUP 9541
[root@LeeMumu ~]# killall httpd
[root@LeeMumu ~]# ps aux | grep httpd
root 9611 0.0 0.0 112708 972 pts/1 S+ 21:41 0:00 grep --color=auto httpd
# 剩下的这一个进程是 grep 的进程,可以通过如下命令对其进行过滤,可以看出对 httpd 所有进程已 killall
[root@LeeMumu ~]# ps aux | grep httpd | grep -v grep
根据进程名来对进程进行杀死。
killall - kill processes by name
语法格式:
killall [-SIGNAL] program
前台作业(foregroud):通过终端启动,且启动后会一直占据终端;
比如: vi cp htop
后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端);
比如: 某些服务类进程 httpd
如何让作业运行于后台?
(1) 运行中的作业
Ctrl+z
注意:送往后台后,作业会转为停止态;
(2) 尚未启动的作业
# COMMAND &
注意:此类作业虽然被送往后台,但其依然与终端相关(如果终端中止,与终端相关的进程也会中止)。
如果希望把送往后台的作业剥离与终端的关系:
# nohup COMMAND &
查看所有的作业:
# jobs
可实现作业控制的常用命令:
# fg [[%]JOB_NUM]:把指定的作业调回前台;
# bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行;
cp 大文件可让其在后台进行复制
# kill %JOB_NUM:终止指定的作业; 注意 % 不能省略,不然会造成相关进程的 kill,造成系统或程序的崩溃
可通过nice值调整的优先级范围:100-139
htop 里的 PRI 值
分别对应于:-20, 19
htop 里的 NI 值
进程启动时,其nice值默认为0,其优先级是120
nice命令:
以指定的nice值启动并运行命令
# nice [OPTION] [COMMAND [ARGU]...]
选项:
-n NICE
# nice -n -5 htop htop 以优先级 -5 启动
注意:仅管理员可调低nice值; 普通用户无此权限,可以调高 nice 值
renice命令:
# renice [-n] NICE PID...
# renice -n -3 PID
查看Nice值和优先级:
ps axo pid, ni, priority, comm
[root@LeeMumu ~]# ps axo pid,ni,priority,comm | grep htop
[root@LeeMumu ~]# htop # 另外一个终端执行此命令
[root@LeeMumu ~]# ps axo pid,ni,priority,comm | grep htop
8862 0 20 htop
[root@LeeMumu ~]# nice -n -5 htop # 另外一个终端执行此命令
[root@LeeMumu ~]# ps axo pid,ni,priority,comm | grep htop
8865 -5 15 htop
[root@LeeMumu ~]# renice -n -10 8865
8865 (process ID) old priority -5, new priority -10
[root@LeeMumu ~]# ps axo pid,ni,priority,comm | grep htop
8865 -10 10 htop
查看内存空间使用状态。
free [OPTION]
-b 以字节为单位
-m 以MB为单位
-g 以GB为单位
-h 易读格式
-o 不显示-/+buffers/cache行
-t 显示RAM + swap的总和
-s n 刷新间隔为n秒
-c n 刷新n次后即退出