Linux进程管理及常用操作

本文详细介绍了Linux中的进程管理,包括进程的基本概念、查看进程的指令如`ps`、`ps-aux`、`ps-ef`,以及如何终止进程。还讲解了服务(service)的管理,如`service`指令的使用,服务的运行级别,以及如何通过`chkconfig`设置服务的自启动。此外,提到了动态监控进程的`top`命令和查看网络状态的`netstat`命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程的基本介绍

  1. 在 LINUX 中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个 ID 号。
  2. 每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如 www 服务器。
  3. 每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
  4. 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。

显示系统执行的进程

说明

查看进行使用的指令是 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进程的启动时间
TIMECPU 时间,即进程使用 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
CCPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高
STIME进程启动的时间
TTY完整的终端名称
TIMECPU 时间
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 330 00:39 aegis
-rwxr-xr-x  1 root root  9873 921 12:34 bt
-rw-r--r--. 1 root root 18281 824 2018 functions
-rwxr-xr-x  1 root root 10642 118 2019 mysqld
-rwxr-xr-x. 1 root root  4569 824 2018 netconsole
-rwxr-xr-x. 1 root root  7923 824 2018 network
-rwxrwxr-x  1 root root  2753 528 2019 nginx
-rwxr-xr-x  1 root root  2405 56 2019 php-fpm-73
-rwxr-xr-x  1 root root  1447 817 2016 pure-ftpd
-rw-r--r--  1 root root  1160 73 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 
.
.
.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值