- Linux管理员教程
- 首页
- CentOS概述
- 基本的CentOS Linux命令
- 文件/文件夹管理
- 用户管理
- 配额管理
- Systemd服务的启动和停止
- 使用systemctl进行资源管理
- 使用cgroups进行资源管理
- 进程管理
- 防火墙设置
- 在CentOS Linux中配置PHP
- 在CentOS Linux中设置Python
- 在CentOS Linux中配置Ruby
- 为CentOS Linux设置Perl
- 安装和配置Open LDAP
- 创建SSL证书
- 安装Apache Web服务器CentOS 7
- 在CentOS 7上设置MySQL
- 设置Postfix MTA和IMAP/POP3
- 安装匿名FTP
- 远程管理
- CentOS中的流量监控
- 日志管理
- 备份和恢复
- 系统更新
- Shell脚本
- 软件包管理
- 卷管理
- Linux管理员有用资源
- Linux管理员 - 快速指南
- Linux管理员 - 有用资源
- Linux管理员 - 讨论
Linux管理员 - 进程管理
以下是进程管理中常用的命令:bg、fg、nohup、ps、pstree、top、kill、killall、free、uptime、nice。
处理进程
快速提示 - Linux中的进程PID
在Linux中,每个运行的进程都会获得一个PID(进程ID号)。CentOS就是通过这个PID来识别特定进程的。正如我们所讨论的,systemd是第一个启动的进程,在CentOS中其PID为1。
pgrep用于获取给定进程名称的Linux PID。
[root@CentOS]# pgrep systemd 1 [root@CentOS]#
如上所示,pgrep命令返回systemd的当前PID。
CentOS中基本的CentOS进程和作业管理
在Linux中处理进程时,了解如何在命令行执行基本的后台和前台进程非常重要。
fg - 将进程置于前台
bg - 将进程置于后台
jobs - 附加到shell的当前进程列表
ctrl+z - 使用Control + z键组合来挂起当前进程
& - 在后台启动进程
让我们开始使用shell命令sleep。sleep顾名思义,它会休眠一段时间 - sleep。
[root@CentOS ~]$ jobs [root@CentOS ~]$ sleep 10 & [1] 12454 [root@CentOS ~]$ sleep 20 & [2] 12479 [root@CentOS ~]$ jobs [1]- Running sleep 10 & [2]+ Running sleep 20 & [cnetos@CentOS ~]$
现在,让我们将第一个作业调到前台 -
[root@CentOS ~]$ fg 1 sleep 10
如果你正在跟着操作,你会注意到前台作业卡在你的shell中。现在,让我们将进程挂起,然后在后台重新启用它。
- 按control+z
- 键入:bg 1,将第一个作业发送到后台并启动它。
[root@CentOS ~]$ fg 1 sleep 20 ^Z [1]+ Stopped sleep 20 [root@CentOS ~]$ bg 1 [1]+ sleep 20 & [root@CentOS ~]$
nohup
从shell或终端工作时,值得注意的是,默认情况下,所有附加到shell的进程和作业在shell关闭或用户注销时都会终止。使用nohup,如果用户注销或关闭附加了进程的shell,进程将继续运行。
[root@CentOS]# nohup ping www.google.com & [1] 27299 nohup: ignoring input and appending output to ‘nohup.out’ [root@CentOS]# pgrep ping 27299 [root@CentOS]# kill -KILL `pgrep ping` [1]+ Killed nohup ping www.google.com [root@CentOS rdc]# cat nohup.out PING www.google.com (216.58.193.68) 56(84) bytes of data. 64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 1 ttl = 128 time = 51.6 ms 64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 2 ttl = 128 time = 54.2 ms 64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 3 ttl = 128 time = 52.7 ms
ps命令
管理员通常使用ps命令来调查特定进程的快照。ps通常与grep一起使用来过滤要分析的特定进程。
[root@CentOS ~]$ ps axw | grep python 762 ? Ssl 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork -nopid 1296 ? Ssl 0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P 15550 pts/0 S+ 0:00 grep --color=auto python
在上面的命令中,我们看到所有使用python解释器的进程。结果还包括我们的grep命令,它查找字符串python。
以下是与ps一起使用的最常用命令行开关。
开关 | 操作 |
---|---|
a | 排除仅当前用户的报告进程的约束 |
x | 显示未附加到tty或shell的进程 |
w | 格式化输出的宽输出显示 |
e | 显示命令后的环境 |
-e | 选择所有进程 |
-o | 用户定义的格式化输出 |
-u | 显示特定用户的所有进程 |
-C | 按名称或进程ID显示所有进程 |
--sort | 按定义对进程进行排序 |
查看nobody用户正在使用的所有进程 -
[root@CentOS ~]$ ps -u nobody PID TTY TIME CMD 1853 ? 00:00:00 dnsmasq [root@CentOS ~]$
查看firewalld进程的所有信息 -
[root@CentOS ~]$ ps -wl -C firewalld F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 762 1 0 80 0 - 81786 poll_s ? 00:00:01 firewalld [root@CentOS ~]$
让我们看看哪些进程正在消耗最多的内存 -
[root@CentOS ~]$ ps aux --sort=-pmem | head -10 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND cnetos 6130 0.7 5.7 1344512 108364 ? Sl 02:16 0:29 /usr/bin/gnome-shell cnetos 6449 0.0 3.4 1375872 64440 ? Sl 02:16 0:00 /usr/libexec/evolution-calendar-factory root 5404 0.6 2.1 190256 39920 tty1 Ssl+ 02:15 0:27 /usr/bin/Xorg :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-iDefCt/database -seat seat0 -nolisten tcp vt1 cnetos 6296 0.0 1.7 1081944 32136 ? Sl 02:16 0:00 /usr/libexec/evolution/3.12/evolution-alarm-notify cnetos 6350 0.0 1.5 560728 29844 ? Sl 02:16 0:01 /usr/bin/prlsga cnetos 6158 0.0 1.4 1026956 28004 ? Sl 02:16 0:00 /usr/libexec/gnome-shell-calendar-server cnetos 6169 0.0 1.4 1120028 27576 ? Sl 02:16 0:00 /usr/libexec/evolution-source-registry root 762 0.0 1.4 327144 26724 ? Ssl 02:09 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid cnetos 6026 0.0 1.4 1090832 26376 ? Sl 02:16 0:00 /usr/libexec/gnome-settings-daemon [root@CentOS ~]$
查看centos用户的所有进程并格式化,显示自定义输出 -
[cnetos@CentOS ~]$ ps -u cnetos -o pid,uname,comm PID USER COMMAND 5802 centos gnome-keyring-d 5812 cnetos gnome-session 5819 cnetos dbus-launch 5820 cnetos dbus-daemon 5888 cnetos gvfsd 5893 cnetos gvfsd-fuse 5980 cnetos ssh-agent 5996 cnetos at-spi-bus-laun
pstree命令
pstree类似于ps,但并不经常使用。它以更整洁的树状方式显示进程。
[centos@CentOS ~]$ pstree systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─2*[abrt-watch-log] ├─abrtd ├─accounts-daemon───2*[{accounts-daemon}] ├─alsactl ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon} │ └─3*[{at-spi-bus-laun}] ├─at-spi2-registr───2*[{at-spi2-registr}] ├─atd ├─auditd─┬─audispd─┬─sedispatch │ │ └─{audispd} │ └─{auditd} ├─avahi-daemon───avahi-daemon ├─caribou───2*[{caribou}] ├─cgrulesengd ├─chronyd ├─colord───2*[{colord}] ├─crond ├─cupsd
pstree的总输出可能超过100行。通常,ps会提供更有用的信息。
top命令
top是在Linux中排查性能问题时最常用的命令之一。它对于Linux中的实时统计和进程监控非常有用。以下是从命令行启动top时的默认输出。
Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.3 us, 2.0 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1879668 total, 177020 free, 607544 used, 1095104 buff/cache KiB Swap: 3145724 total, 3145428 free, 296 used. 1034648 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5404 root 20 0 197832 48024 6744 S 1.3 2.6 1:13.22 Xorg 8013 centos 20 0 555316 23104 13140 S 1.0 1.2 0:14.89 gnome-terminal- 6339 centos 20 0 332336 6016 3248 S 0.3 0.3 0:23.71 prlcc 6351 centos 20 0 21044 1532 1292 S 0.3 0.1 0:02.66 prlshprof
运行top时常用的热键(热键是在shell中运行top时按下的键)。
命令 | 操作 |
---|---|
b | 启用/禁用顶部菜单上的粗体高亮显示 |
z | 循环颜色方案 |
l | 循环负载平均标题 |
m | 循环内存平均标题 |
t | 任务信息标题 |
h | 帮助菜单 |
Shift+F | 自定义排序和显示字段 |
以下是top的常用命令行开关。
命令 | 操作 |
---|---|
-o | 按列排序(可以在前面加上-或+以进行升序或降序排序) |
-u | 仅显示指定用户的进程 |
-d | 更新top的延迟时间 |
-O | 返回top可以应用排序的列列表 |
Shift+F呈现的top中的排序选项屏幕。此屏幕允许自定义top显示和排序选项。
Fields Management for window 1:Def, whose current sort field is %MEM Navigate with Up/Dn, Right selects for move then <Enter> or Left commits, 'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end! * PID = Process Id TGID = Thread Group Id * USER = Effective User Name ENVIRON = Environment vars * PR = Priority vMj = Major Faults delta * NI = Nice Value vMn = Minor Faults delta * VIRT = Virtual Image (KiB) USED = Res+Swap Size (KiB) * RES = Resident Size (KiB) nsIPC = IPC namespace Inode * SHR = Shared Memory (KiB) nsMNT = MNT namespace Inode * S = Process Status nsNET = NET namespace Inode * %CPU = CPU Usage nsPID = PID namespace Inode * %MEM = Memory Usage (RES) nsUSER = USER namespace Inode * TIME+ = CPU Time, hundredths nsUTS = UTS namespace Inode * COMMAND = Command Name/Line PPID = Parent Process pid UID = Effective User Id
top,显示用户rdc的进程并按内存使用情况排序 -
PID USER %MEM PR NI VIRT RES SHR S %CPU TIME+ COMMAND 6130 rdc 6.2 20 0 1349592 117160 33232 S 0.0 1:09.34 gnome-shell 6449 rdc 3.4 20 0 1375872 64428 21400 S 0.0 0:00.43 evolution-calen 6296 rdc 1.7 20 0 1081944 32140 22596 S 0.0 0:00.40 evolution-alarm 6350 rdc 1.6 20 0 560728 29844 4256 S 0.0 0:10.16 prlsga 6281 rdc 1.5 20 0 1027176 28808 17680 S 0.0 0:00.78 nautilus 6158 rdc 1.5 20 0 1026956 28004 19072 S 0.0 0:00.20 gnome-shell-cal
显示有效的top字段(精简版) -
[centos@CentOS ~]$ top -O PID PPID UID USER RUID RUSER SUID SUSER GID GROUP PGRP TTY TPGID
kill命令
kill命令用于通过其PID从命令shell终止进程。终止进程时,我们需要指定要发送的信号。信号让内核知道我们希望如何结束进程。最常用的信号是 -
SIGTERM被隐含地认为是内核让进程知道它应该尽快停止,因为它安全这样做。SIGTERM使进程有机会优雅地退出并执行安全的退出操作。
SIGHUP大多数守护进程在收到SIGHUP时会重新启动。当对配置文件进行了更改时,这通常用于进程。
SIGKILL由于SIGTERM相当于请求进程关闭。内核需要一个选项来结束不遵守请求的进程。当进程挂起时,使用SIGKILL选项显式地关闭进程。
要查看可以使用kill发送的所有信号列表,可以使用-l选项 -
[root@CentOS]# 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 [root@CentOS rdc]#
使用SIGHUP重新启动系统。
[root@CentOS]# pgrep systemd 1 464 500 643 15071 [root@CentOS]# kill -HUP 1 [root@CentOS]# pgrep systemd 1 464 500 643 15196 15197 15198 [root@CentOS]#
pkill允许管理员按进程名称发送kill信号。
[root@CentOS]# pgrep ping 19450 [root@CentOS]# pkill -9 ping [root@CentOS]# pgrep ping [root@CentOS]#
killall将终止所有进程。小心使用root权限的killall,因为它将终止所有用户的全部进程。
[root@CentOS]# killall chrome
free命令
free是一个非常简单的命令,通常用于快速检查系统的内存。它显示已使用的物理内存和交换内存的总量。
[root@CentOS]# free total used free shared buff/cache available Mem: 1879668 526284 699796 10304 653588 1141412 Swap: 3145724 0 3145724 [root@CentOS]#
nice命令
nice允许管理员根据CPU使用情况设置进程的调度优先级。优先级基本上是内核如何为进程或作业调度CPU时间片。默认情况下,假定进程对CPU资源具有同等访问权限。
首先,让我们使用top检查当前正在运行的进程的优先级。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28 root 39 19 0 0 0 S 0.0 0.0 0:00.17 khugepaged 690 root 39 19 16808 1396 1164 S 0.0 0.1 0:00.01 alsactl] 9598 rdc 39 19 980596 21904 10284 S 0.0 1.2 0:00.27 tracker-extract 9599 rdc 39 19 469876 9608 6980 S 0.0 0.5 0:00.04 tracker-miner-a 9609 rdc 39 19 636528 13172 8044 S 0.0 0.7 0:00.12 tracker-miner-f 9611 rdc 39 19 469620 8984 6496 S 0.0 0.5 0:00.02 tracker-miner-u 27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd 637 rtkit 21 1 164648 1276 1068 S 0.0 0.1 0:00.11 rtkit-daemon 1 root 20 0 128096 6712 3964 S 0.3 0.4 0:03.57 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.50 ksoftirqd/0 7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:02.07 rcu_sched
我们要关注由NI表示的NICE列。优先级范围可以在-20到正19之间。-20表示给予的最高优先级。
nohup nice --20 ping www.google.com &
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 30727 root 0 -20 132108 1640 1264 S 0.0 0.1 0:00.06 ping
renice
renice允许我们更改当前正在运行的进程的当前优先级。
renice 17 -p 30727
上面的命令将降低我们的ping进程命令的优先级。