目录
获取进程信息
使用 top 命令可以显示每个进程的状态(持续的监视进程)。
[root@redhat ~]# top
使用 ps 命令可以列出当前的进程,查看详细的进程信息(静态的进程快照)。
[root@redhat ~]# ps aux
[root@redhat ~]# ps lax
[root@redhat ~]# ps -ef
控制作业
在命令行的结尾处加上符号「&」可以在后台运行作业,任何命令或管道都可以在后台活动。
# Shell 会显示特定于会话的唯一作业编号
[root@redhat ~]# sleep 10000 &
[1] 5754
使用 jobs 命令可以显示特定会话跟踪的作业列表。
[root@redhat ~]# jobs
[1]+ 运行中 sleep 10000 &
使用 fg 命令,加上后台作业的 ID 编号,可以将后台作业转到前台。
[root@redhat ~]# fg %1
sleep 10000
使用快捷键 Ctrl + Z 可以将作业置于后台并暂停。如果要启动后台运行的已暂停进程,可以使用 bg 命令,加上后台作业的 ID 编号进行操作。
[root@redhat ~]# bg %1
[1]+ sleep 10000 &
中断进程
使用 kill 命令可以根据 PID 编号,向进程发送终止程序的信号。
# 使用 ps 命令查看目标进程的 PID 编号
[root@redhat ~]# ps aux | grep sleep
root 5806 0.0 0.0 217072 868 pts/0 S 22:01 0:00 sleep 10000
root 5808 0.0 0.0 221928 1168 pts/0 S+ 22:01 0:00 grep --color=auto sleep
# 向进程发送终止程序的信号
[root@redhat ~]# kill 5819
[1]+ Terminated sleep 10000
使用 pkill 命令可以根据命令名称、特定用户拥有的进程,或者所有系统范围的进程发送信号。
[root@redhat ~]# pkill sleep
[1]+ Terminated sleep 10000
[root@redhat ~]# ps aux | grep sleep
user01 5932 0.0 0.0 217072 884 pts/1 S 22:16 0:00 sleep 10000
user01 5936 0.0 0.0 217072 840 pts/1 S+ 22:16 0:00 sleep 20000
root 5938 0.0 0.0 221928 1132 pts/0 S+ 22:16 0:00 grep --color=auto sleep
[root@redhat ~]# pkill -U user01
使用 w 命令可以查看所有用户的登录会话。了解用户已登录系统的时长,当前作业耗用的 CPU 资源信息。
[root@redhat ~]# w
22:20:19 up 2 days, 54 min, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.101.100 21:27 3.00s 0.17s 0.00s w
user01 pts/1 10.0.101.99 22:20 7.00s 0.01s 0.01s -bash
使用 pgrep 命令可以列出进程信息,确定要中断进程的 PID 编号。
[root@redhat ~]# pgrep sleep
5993
# 列出特定用户的进程
[root@redhat ~]# pgrep -l -u user01
5955 systemd
5959 (sd-pam)
5965 sshd
5966 bash
5993 sleep
使用 pstree 命令可以查看系统或单个用户的进程树。
[root@redhat ~]# pstree 1
# 查看用户的进程树
[root@redhat ~]# pstree -p user01
sshd(5965)───bash(5966)───sleep(5993)
systemd(5955)───(sd-pam)(5959)
# 执行 pstree 命令需要安装 psmisc 程序包
[root@redhat ~]# yum -y install psmisc
监控进程活动
使用 uptime 命令可以显示当前时间、计算机启动时长、运行的用户会话数以及当前的负载平均值。
[root@redhat ~]# uptime
22:31:39 up 2 days, 1:05, 2 users, load average: 0.00, 0.00, 0.00
使用 lscpu 命令可以查看处理器信息。
[root@redhat ~]# lscpu
识别自动启动的系统进程
systemd 守护进程用于管理 Linux 的启动,一般包括服务启动和服务管理。它可以在系统引导时,以及在运行中的系统上激活系统资源、服务器守护进程。systemctl 命令可用于管理单元。
使用 systemctl 命令可以列出所有当前加载的服务单元。
[root@redhat ~]# systemctl list-units --type=service
# 使用 --all 选项可以列出所有服务单元
[root@redhat ~]# systemctl list-units --type=service --all
systemctl list-units 命令显示 systemd 服务尝试解析并加载到内存中的单元,它不显示已安装但未启用的服务。如果需要查看所有已安装的单元文件状态,可以使用 systemctl list-unit-files 命令。
[root@redhat ~]# systemctl list-unit-files --type=service
systemctl status 命令可以查看特定单元的状态。
[root@redhat ~]# systemctl status sshd.service
systemctl 输出的服务状态如下:
关键字 | 描述 |
---|---|
loaded | 单元配置文件已处理。 |
active(running) | 正在通过一个或多个持续进程运行。 |
active(exited) | 已成功完成一次性配置。 |
active(waiting) | 运行中,但正在等待事件。 |
inactive | 不在运行。 |
enabled | 在系统引导时启动。 |
disabled | 未设为在系统引导时启动。 |
static | 无法启用,但可以由某一启用的单元自动启动。 |
systemctl 命令还提供了一些方法来验证服务的具体状态。
# 验证服务单元是否正在运行
[root@redhat ~]# systemctl is-active sshd.service
active
# 验证服务单元是否启用系统引导期间自动启动
[root@redhat ~]# systemctl is-enable sshd.service
Unknown operation is-enable.
# 验证服务单元在启动过程中是否失败
[root@redhat ~]# systemctl is-failed sshd.service active
active
inactive
控制系统服务
通过 systemctl 命令可以控制系统守护进程和网络服务。
# 启动服务
[root@redhat ~]# systemctl start sshd.service
# 停止当前正在运行的服务
[root@redhat ~]# systemctl stop sshd.service
# 重新启动服务
[root@redhat ~]# systemctl restart sshd.service
# 某些服务可以重新加载其配置文件
[root@redhat ~]# systemctl reload sshd.service
某些服务要求首先运行其他服务,从而创建对其他服务的依赖项。通过 systemctl list-dependencies 命令可以显示启动服务单元所需的依赖项的层次结构映射。
[root@redhat ~]# systemctl list-dependencies sshd.service
有时系统安装的不同服务之间可能会彼此冲突,通过屏蔽服务可以防止管理员意外启动与其他服务冲突的服务。屏蔽操作会在配置目录中创建指向 /dev/null 文件的链接,该文件可阻止服务启动。
[root@redhat ~]# systemctl mask sendmail.service
# 取消屏蔽服务单元
[root@redhat ~]# systemctl unmask sendmail
需要在系统引导时自动启动服务,可以使用 systemctl enable 命令。
[root@redhat ~]# systemctl enable sshd.service
# 禁用服务自动启动
[root@redhat ~]# systemctl disable sshd.service
总结
- 进程是可执行程序的运行中实例,ps 命令用于列出进程。
- 每个终端可以具有一个前台进程和多个独立的后台进程,jobs 命令显示终端会话中的进程。
- 信号是向执行中的程序报告事件的软件中断,kill 命令使用信号来控制进程。
- 使用 systemctl 命令可以启动、停止、重新加载、启用和禁用服务。
- 使用 systemctl status 命令可以确定 systemd 启动的系统守护进程和网络服务的状态。
- 使用 systemctl list-dependencies 命令可列出特定服务单元依赖的所有服务单元。
「RHCSA 红帽系统管理」5、管理进程和系统服务
https://blog.kobin.cn/notes/2891.html