Linux是一个多用户多任务的操作系统,可以同时执行多个任务。
每个执行的任务都被称为进程(process)。
Linux系统中每运行一个程序都会创建一个进程。
进程就是一个正在运行的程序实例。
进程是一个动态的概念,可以与操作系统、其他进程以及用户进行数据交互。
每个进程启动后,系统都会自动为它分配一个唯一的数值,用于标识该进程,这个数值就被称为进程号(Process ID,PID)。进程号是这个进程的唯一标识,系统也是通过进程号来管理的。
[root@localhost ~]# pstree
[root@localhost ~]# pstree -p
[root@localhost ~]# pstree -a
[root@localhost ~]# pstree lisi
bash
[root@localhost ~]# pstree -p lisi
bash(17546)
ps 命令 (Processes Snapshot)
命令格式: ps [选项]
常用选项
[root@localhost ~]# ps aux
用户 进程ID 占用CPU 占用内存 虚拟内存 固定内存 终端 状态 起始状态 CPU时间 程序指令
[root@localhost ~]# ps -elf
输出内容中会显示PPID(父进程ID)
[root@localhost ~]# top -d5
pgrep (Process Grep)
命令格式 : pgrep [选项] 查询条件
常用命令:
[root@localhost ~]# pgrep -l bash //查找进程名中带有bash的
17012 bash
17476 bash
17546 bash
[root@localhost ~]# pgrep -lU lisi //查找用户lisi的进程
17546 bash
[root@localhost ~]# pgrep -lx crond //查找进程名叫crond的
1145 crond
前台启动
后台启动
Ctrl+z 挂起当前进程(暂停运行转入后台)
jobs 命令
[root@localhost ~]# sleep 100 &
[1] 21162
[root@localhost ~]# jobs
[1]+ 运行中 sleep 100 &
[root@localhost ~]# fg 1
sleep 100
[root@localhost ~]# fg 1
sleep 100
^Z
[1]+ 已停止 sleep 100
[root@localhost ~]# jobs
[1]+ 已停止 sleep 100
[root@localhost ~]# bg 1
[1]+ sleep 100 &
[root@localhost ~]# jobs
[1]+ 运行中 sleep 100 &
普通用户只能终止自己运行的进程,root用户可以终止所有。
Ctrl+C 结束前台进程
kill 命令
[root@localhost ~]# sleep 100000 &
[1] 23123
[root@localhost ~]# jobs
[1]+ 运行中 sleep 100000 &
[root@localhost ~]# kill 23123
[root@localhost ~]# jobs
[1]+ 已终止 sleep 100000
[root@localhost ~]# sleep 100000 &
[1] 23168
[root@localhost ~]# jobs
[1]+ 运行中 sleep 100000 &
[root@localhost ~]# kill %1
[root@localhost ~]# jobs
[1]+ 已终止 sleep 100000
killall 命令
[root@localhost ~]# sleep 100000 &
[1] 23300
[root@localhost ~]# jobs
[1]+ 运行中 sleep 100000 &
[root@localhost ~]# killall sleep
[1]+ 已终止 sleep 100000
pkill 命令
[root@localhost ~]# sleep 100000 &
[1] 23363
[root@localhost ~]# jobs
[1]+ 运行中 sleep 100000 &
[root@localhost ~]# pkill -9 sleep
[1]+ 已杀死 sleep 100000
字段 | 说明 |
---|---|
UID | 运行进程的用户 |
PID | 进程的ID |
PPID | 父进程ID |
C | CPU调度情况 |
STIME | 进程启动的时间 |
TTY | 终端号 |
TIME | 进程使用的CPU时间 |
CMD | 启动进程的命令 |
使用管道与grep命令
例如:查看包含bash字段的进程
[root@localhost ~]# ps -ef | grep bash
root 861 1 0 06:20 ? 00:00:00 /bin/bash /usr/sbin/ksmtuned
root 11384 11376 0 06:21 pts/0 00:00:00 -bash
root 11729 11384 0 06:51 pts/0 00:00:00 grep --color=auto bash
例如:以长格式显示当前终端运行的所有进程信息
[root@localhost ~]# ps -Tl
F S UID PID SPID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 11384 11384 11376 0 80 0 - 29052 do_wai pts/0 00:00:00 bash
0 R 0 11772 11772 11384 0 80 0 - 38300 - pts/0 00:00:00 ps
-aux选项,查看系统中所有进程的资源使用情况,包括:运行进程的用户、CPU使用率、内存使用率、驻留数据集大小、终端号、进程状态、进程启动时间、进程使用的CPU时间、以及运行进程的命令。
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128176 6848 ? Ss 06:20 0:01 /usr/lib/systemd/systemd --swi
root 2 0.0 0.0 0 0 ? S 06:20 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 06:20 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 06:20 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 06:20 0:00 [migration/0]
在Linux系统中,每个进程在执行是都会被赋予一个优先等级,等级越高,进程获得的CPU时间就会越多。所以级别越高的进程,运行的时间就会越短,反之则需要较长的运行时间。
进程的优先等级范围为 - 20 ~ 19 , 其中 - 20 表示最高等级,19 表示最低。
等级 - 1 ~ - 20 只有root用户可以设置。
进程运行的默认级别为0 。
命令格式:
[root@localhost ~]# nice --help
Usage: nice [OPTION] [COMMAND [ARG]...]
[root@localhost ~]# sleep 10000 & //系统默认启动的优先级为0
[1] 1269
[root@localhost ~]# nice sleep 10000 & //使用nice命令启动的进程,默认优先级为10
[2] 1270
[root@localhost ~]# nice -19 sleep 10000 & //-19 表示优先级为19
[3] 1271
[root@localhost ~]# nice --19 sleep 10000 & //--19 表示优先级为-19
[4] 1272
[root@localhost ~]# nice --40 sleep 10000 &
//这里指定优先级为40,但实际上Linux系统优先级上限最高为20,所以这个进程的优先级为20
[5] 1273
[root@localhost ~]# ps -l //查看进程信息
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 1269 1247 0 80 0 - 26987 hrtime pts/0 00:00:00 sleep
0 S 0 1270 1247 0 90 10 - 26987 hrtime pts/0 00:00:00 sleep
0 S 0 1271 1247 0 99 19 - 26987 hrtime pts/0 00:00:00 sleep
4 S 0 1272 1247 0 61 -19 - 26987 hrtime pts/0 00:00:00 sleep
4 S 0 1273 1247 0 60 -20 - 26987 hrtime pts/0 00:00:00 sleep