进程的基本介绍
- 在 LINUX 中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号。
- 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如 www 服务器。
- 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
- 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
显示系统执行的进程
说明
查看进行使用的指令是 ps
,一般来说使用的参数是 ps -aux
ps -a:显示当前终端的所有进程信息
ps -u:以用户的格式显示进程信息
ps-x:显示后台进程运行的参数
[root@iZwz98zi7ua638a1dxozhyZ ~]# ps
PID TTY TIME CMD
1360 pts/0 00:00:00 ps
21306 pts/0 00:00:00 bash
[root@iZwz98zi7ua638a1dxozhyZ ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 43528 3708 ? Ss 2019 7:01 /usr/lib/systemd/systemd --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 2019 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 2019 0:19 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 2019 0:14 [migration/0]
root 8 0.0 0.0 0 0 ? S 2019 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 2019 152:20 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 2019 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 2019 2:51 [watchdog/0]
root 12 0.0 0.0 0 0 ? S 2019 2:12 [watchdog/1]
root 13 0.0 0.0 0 0 ? S 2019 0:14 [migration/1]
root 14 0.0 0.0 0 0 ? S 2019 0:12 [ksoftirqd/1]
root 16 0.0 0.0 0 0 ? S< 2019 0:00 [kworker/1:0H]
root 18 0.0 0.0 0 0 ? S 2019 0:00 [kdevtmpfs]
root 19 0.0 0.0 0 0 ? S< 2019 0:00 [netns]
root 20 0.0 0.0 0 0 ? S 2019 0:17 [khungtaskd]
.
.
.
ps 显示的信息选项:
字段 | 说明 |
---|---|
PID | 进程识别号 |
TTY | 终端机号 |
TIME | 此进程所消 CPU 时间 |
CMD | 正在执行的命令或进程名 |
ps -aux 显示的信息选项:
字段 | 说明 |
---|---|
USER | 用户名称 |
PID | 进程号 |
%CPU | 进程占用 CPU 的百分比 |
%MEM | 进程占用物理内存的百分比 |
VSZ | 进程占用的虚拟内存大小(单位:KB) |
RSS | 进程占用的物理内存大小(单位:KB) |
TTY | 终端名称(缩写) |
STAT | 进程状态,其中 S- 睡眠,s- 表示该进程是会话的先导进程,N- 表示进程拥有比普通优先级更低的优先级,R- 正在运行,D- 短期等待,Z- 僵死进程,T- 被跟踪或者被停止等等 |
START | 进程的启动时间 |
TIME | CPU 时间,即进程使用 CPU 的总时间 |
COMMAND | 启动进程所用的命令和参数,如果过长会被截断显示 |
实例
1、查看系统是否开启 sshd 服务
[root@iZwz98zi7ua638a1dxozhyZ ~]# ps -aux | grep sshd
root 1109 0.0 0.0 112864 2580 ? Ss 2019 0:33 /usr/sbin/sshd -D
root 9850 0.0 0.0 112828 980 pts/0 D+ 14:48 0:00 grep --color=auto sshd
root 21304 0.3 0.1 157600 6348 ? Ss 14:29 0:04 sshd: root@pts/0,pts/1
root 21321 0.0 0.1 157276 5944 ? Ss 14:29 0:00 sshd: root@notty
2、以全格式显示当前所有的进程,查看进程的父进程
[root@iZwz98zi7ua638a1dxozhyZ ~]# ps -ef | more
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2019 ? 00:07:01 /usr/lib/systemd/systemd --system --deserialize 22
root 2 0 0 2019 ? 00:00:00 [kthreadd]
root 3 2 0 2019 ? 00:00:19 [ksoftirqd/0]
root 5 2 0 2019 ? 00:00:00 [kworker/0:0H]
root 7 2 0 2019 ? 00:00:14 [migration/0]
root 8 2 0 2019 ? 00:00:00 [rcu_bh]
root 9 2 0 2019 ? 02:32:21 [rcu_sched]
root 10 2 0 2019 ? 00:00:00 [lru-add-drain]
root 11 2 0 2019 ? 00:02:51 [watchdog/0]
root 12 2 0 2019 ? 00:02:12 [watchdog/1]
root 13 2 0 2019 ? 00:00:14 [migration/1]
root 14 2 0 2019 ? 00:00:12 [ksoftirqd/1]
root 16 2 0 2019 ? 00:00:00 [kworker/1:0H]
root 18 2 0 2019 ? 00:00:00 [kdevtmpfs]
root 19 2 0 2019 ? 00:00:00 [netns]
root 20 2 0 2019 ? 00:00:17 [khungtaskd]
root 21 2 0 2019 ? 00:00:00 [writeback]
ps -ef 是以全格式显示当前所有的进程:
- -e 显示所有进程。
- -f 全格式。
ps -ef 显示的信息选项:
字段 | 说明 |
---|---|
UID | 用户 ID |
PID | 进程 ID |
PPID | 父进程 ID |
C | CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高 |
STIME | 进程启动的时间 |
TTY | 完整的终端名称 |
TIME | CPU 时间 |
CMD | 启动进程所用的命令和参数 |
终止进程 kill 和 killall
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用 kill 命令来完成此项任务。
kill [选项] 进程号
:通过进程号杀死进程(常用选项:-9 表示强迫进程立即停止)
killall 进程名称
:通过进程名称杀死进程(支持通配符,这在系统因负载过大而变得很慢时很有用)
查看进程树 pstree
pstree [选项]
:可以更加直观的来看进程信息
常用选项:
-
-p:显示进程的 PID
-
-u:显示进程的所属用户
[root@iZwz98zi7ua638a1dxozhyZ ~]# pstree -p
systemd(1)─┬─nginx(29129)─┬─nginx(1487)
│ ├─nginx(1488)
│ └─nginx(1489)
├─php-fpm(6152)─┬─php-fpm(3434)
│ ├─php-fpm(3435)
│ ├─php-fpm(3436)
│ ├─php-fpm(3439)
│ ├─php-fpm(3440)
│ ├─php-fpm(3441)
│ ├─php-fpm(5370)
│ ├─php-fpm(6154)
│ ├─php-fpm(6155)
│ ├─php-fpm(6156)
│ └─php-fpm(26163)
├─polkitd(594)─┬─{polkitd}(671)
│ ├─{polkitd}(672)
│ ├─{polkitd}(673)
│ ├─{polkitd}(674)
│ ├─{polkitd}(675)
│ └─{polkitd}(679)
├─pure-ftpd(5883)
├─redis-server(22094)─┬─{redis-server}(22095)
│ ├─{redis-server}(22096)
│ ├─{redis-server}(22097)
│ └─{redis-server}(22098)
├─redis-server(22100)─┬─{redis-server}(22101)
│ ├─{redis-server}(22102)
│ ├─{redis-server}(22103)
│ └─{redis-server}(22104)
├─redis-server(22106)─┬─{redis-server}(22107)
│ ├─{redis-server}(22108)
│ ├─{redis-server}(22109)
│ └─{redis-server}(22110)
├─redis-server(22126)─┬─{redis-server}(22127)
│ ├─{redis-server}(22128)
│ ├─{redis-server}(22129)
│ └─{redis-server}(22130)
├─redis-server(22132)─┬─{redis-server}(22133)
│ ├─{redis-server}(22134)
│ ├─{redis-server}(22135)
│ └─{redis-server}(22136)
├─redis-server(22196)─┬─{redis-server}(22197)
│ ├─{redis-server}(22198)
│ ├─{redis-server}(22199)
│ ├─{redis-server}(22200)
│ └─{redis-server}(22202)
├─rsyslogd(902)─┬─{rsyslogd}(936)
│ └─{rsyslogd}(955)
├─sshd(1109)─┬─sshd(21304)─┬─bash(21306)───pstree(23878)
│ │ ├─bash(21322)───top(21436)
│ │ └─bash(23851)───sleep(23860)
│ └─sshd(21321)─┬─sftp-server(21338)
│ ├─sftp-server(21345)
│ ├─sftp-server(21352)
│ ├─sftp-server(21359)
│ ├─sftp-server(21366)
│ └─sftp-server(21373)
├─systemd-journal(396)
├─systemd-logind(593)
├─systemd-udevd(429)
└─tuned(897)─┬─{tuned}(1012)
├─{tuned}(1013)
├─{tuned}(1014)
└─{tuned}(1028)
服务(Service)管理
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如 mysql、sshd、防火墙等,因此我们又称为守护进程。
service 管理指令
service 服务名 [start | stop | restart | reload | status]
注意:在 CentOS7.0 后不再使用 service,而是 systemctl
使用实例
查看防火墙状态:service iptables status
开启防火墙: service iptables start
关闭防火墙: service iptables stop
说明:这种方式只是临时的关闭,重启后失效。若想要永久的生效,要使用 chkconfig 指令。
查看服务名
方式 1:使用 setup -> 系统服务
方式 2:/etc/init.d/ 服务名称
[root@iZwz98zi7ua638a1dxozhyZ ~]# ls -l /etc/init.d/
总用量 80
-rwxr-xr-x 1 root root 2415 3月 30 00:39 aegis
-rwxr-xr-x 1 root root 9873 9月 21 12:34 bt
-rw-r--r--. 1 root root 18281 8月 24 2018 functions
-rwxr-xr-x 1 root root 10642 11月 8 2019 mysqld
-rwxr-xr-x. 1 root root 4569 8月 24 2018 netconsole
-rwxr-xr-x. 1 root root 7923 8月 24 2018 network
-rwxrwxr-x 1 root root 2753 5月 28 2019 nginx
-rwxr-xr-x 1 root root 2405 5月 6 2019 php-fpm-73
-rwxr-xr-x 1 root root 1447 8月 17 2016 pure-ftpd
-rw-r--r-- 1 root root 1160 7月 3 2019 README
服务的运行级别(runlevel)
查看或者修改默认级别:vi /etc/inittab
Linux 系统有 7 种运行级别(runlevel):常用的是级别 3 和 5
- 运行级别 0:系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动
- 运行级别 1:单用户工作状态,root 权限,用于系统维护,禁止远程登陆
- 运行级别 2:多用户状态(没有 NFS),不支持网络
- 运行级别 3:完全的多用户状态(有 NFS),登陆后进入控制台命令行模式
- 运行级别 4:系统未使用,保留
- 运行级别 5:X11 控制台,登陆后进入图形 GUI 模式
- 运行级别 6:系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动
开机的流程说明:
chkconfig 指令
通过 chkconfig 命令可以给每个服务的各个运行级别设置自启动/关闭
查看服务:chkconfig [服务名] --list | grep xxx
[root@iZwz98zi7ua638a1dxozhyZ ~]# chkconfig --list
aegis 0:关 1:关 2:开 3:开 4:开 5:开 6:关
bt 0:关 1:关 2:开 3:开 4:开 5:开 6:关
mysqld 0:关 1:关 2:开 3:开 4:开 5:开 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
nginx 0:关 1:关 2:开 3:开 4:开 5:开 6:关
php-fpm-73 0:关 1:关 2:开 3:开 4:开 5:开 6:关
pure-ftpd 0:关 1:关 2:开 3:开 4:开 5:开 6:关
[root@iZwz98zi7ua638a1dxozhyZ ~]# chkconfig --list | grep nginx
nginx 0:关 1:关 2:开 3:开 4:开 5:开 6:关
[root@iZwz98zi7ua638a1dxozhyZ ~]# chkconfig nginx --list
nginx 0:关 1:关 2:开 3:开 4:开 5:开 6:关
修改服务:chkconfig --level 级别 服务名 on/off
[root@iZwz98zi7ua638a1dxozhyZ ~]# chkconfig --level 5 nginx off
[root@iZwz98zi7ua638a1dxozhyZ ~]# chkconfig --list | grep nginx
nginx 0:关 1:关 2:开 3:开 4:开 5:关 6:关
注意:chkconfig 重新设置服务后自启动或关闭,需要重启机器 reboot 才能生效
动态监控进程
top 与 ps 命令很相似。它们都用来显示正在执行的进程。top 与 ps 最大的不同之处,在于 top 在执行一段时间可以更新正在运行的的进程。
top [选项]
选项 | 功能 |
---|---|
-d 秒数 | 指定 top 命令每隔几秒更新,默认是 3 秒,在 top 命令的交互模式当中可以执行的命令 |
-i | 使 top 不显示任何闲置或者僵死进程 |
-p | 通过指定监控进程 ID 来仅仅监控某个进程的状态 |
交互操作功能说明:
操作 | 功能 |
---|---|
P | 以 CPU 使用率排序,默认就是此项 |
M | 以内存的使用率排序 |
N | 以 PID 排序 |
q | 退出 top |
查看系统网络情况
netstat [选项]
选项说明:
-an 按一定顺序排列输出
-p 显示哪个进程在调用
[root@iZwz98zi7ua638a1dxozhyZ ~]# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:16389 0.0.0.0:* LISTEN 22094/redis-server
tcp 0 0 127.0.0.1:16390 0.0.0.0:* LISTEN 22100/redis-server
tcp 0 0 127.0.0.1:16391 0.0.0.0:* LISTEN 22106/redis-server
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 22196/redis-server
tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 22126/redis-server
tcp 0 0 127.0.0.1:6381 0.0.0.0:* LISTEN 22132/redis-server
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1487/nginx: worker
tcp 0 0 127.0.0.1:6389 0.0.0.0:* LISTEN 22094/redis-server
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 5883/pure-ftpd (SER
.
.
.