Linux 进程管理


以下是Process Management使用的常用命令 - bg,fg,nohup,ps,pstree,top,kill,killall,免费,正常运行时间,很好。

与过程一起工作

快速提示:Linux中的进程PID

在Linux中,每个正在运行的进程都有一个PID或进程ID号。这个 PID 是CentOS如何识别特定进程的。正如我们所讨论的, systemd 是第一个启动的进程,并且在CentOS中给出1的PID。

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 睡眠 只是按照它的名字命名,睡一段时间: 睡眠

[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中。现在,我们让这个进程进入休眠状态,然后在后台重新启用它。

  • 点击控制+ 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命令

pstreeps 类似,但不经常使用。它以整洁树形式显示进程。

[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 会提供更多有用的信息。

顶部命令

**在Linux中解决性能问题时, top** 是最常用的命令之一。它对于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

顶部运行时使用的常用 热键 (当顶部运行在shell中时按 热键 可访问 热键 )。

命令 动作
b 在顶部菜单上启用/禁用粗体突出显示
z 循环配色方案
l 循环加载平均标题
m 循环内存平均标题
t 任务信息标题
h 帮助菜单
Shift+F 定制的排序和显示字段

以下是 top 的常用命令行开关。

命令 动作
-o 按列排序(可以使用 - 或+排序升序或降序)
-u 仅显示来自指定用户的进程
-d 更新top的延迟时间
-O 返回顶部可以应用排序的列的列表

排序选项屏幕在顶部,使用 Shift+F 显示_ 。该屏幕允许自定义 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

显示有效的顶部字段(精简)

[centos@CentOS ~]$ top -O
PID
PPID
UID
USER
RUID
RUSER
SUID
SUSER
GID
GROUP
PGRP
TTY
TPGID

kill 命令

所述 kill 命令用于杀死从通过它的PID命令外壳的方法。在 杀死 进程时,我们需要指定要发送的信号。该信号让内核知道我们想如何结束这个过程。最常用的信号是

  • SIGTERM 是暗示的,因为内核让进程知道它应该尽快停止,因为这样做是安全的。 SIGTERM 为流程提供了一个良好退出并执行安全退出操作的机会。

  • SIGHUP 大多数守护进程会在发送 SIGHUP 时重新启动。在对配置文件进行更改时,这通常用于进程。

  • 因为 SIGTERMSIGKILL 相当于要求进程关闭。内核需要一个选项来结束一个不符合请求的进程。当进程挂起时, 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 会杀死所有进程。小心使用 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&

renice

renice 允许我们改变已经运行的进程的当前优先级。

renice 17 -p 30727

上述命令会降低我们的 ping 进程命令的优先级。