用户与进程管理

进程管理
  • 什么是程序:用计算机语言编写的命令序列集合,用来实现特定的目标或解决特定的问题,程序占用磁盘空间,程序是静态并且是永久的
  • 什么是进程:正在运行中的程序叫进程,进程有自己的独立内存空间,每启动一个进程,系统就会为它分配内存空间并分配一个PID号, 每个进程都会对应一个父进程,而父进程可以复制多个子进程,每种进程都有两种方式存在,前台与后台,一般进程都是以后台方式运行
  • 什么是线程:线程也被称为轻量级进程,被包含在进程中,是进程的一个子集,是进程中的实际运作单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务,每个线程都是独立的,线程之间共享进程的内存空间,在多线程的程序中,由于线程很"轻”,故线程的切换非常迅速且开销小(在同进程中)
查看进程树
  • pstree以树状结构显示进程,包括进程之间的关系

  • 命令格式:pstree [选项...] [参数...]

  • 常用选项:

    • -p #显示进程PID
    • -a #显示完成的命令行
    • -u #列出每个进程所属的账号名称
    [root@localhost ~]# pstree
    systemd─┬─ModemManager───2*[{ModemManager}]
    [root@localhost ~]# pstree -p
    systemd(1)─┬─ModemManager(782)─┬─{ModemManager}(805)
    [root@localhost ~]# pstree -pa visitor 
    sshd,19156 
      └─bash,19160
    [root@localhost ~]# 
    [root@localhost ~]# pstree -u visitor 
    sshd───bash
    [root@localhost ~]# 
    
    
  • ps aux:unix格式静态查看系统进程,查看所有进程信息

    • a #显示当前终端所有进程
    • u #以用户格式输出
    • x #当前用户在所有终端下的进程
  • ps -ef liunx格式静态查看系统进程,查看系统所有进程信息

    • -e #显示当前终端所有进程
    • -l #以长格式输出信息
    • -f #显示最完成的进程信息
    [root@localhost ~]# ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.3 193700  6852 ?        Ss   8月16   0:04 /usr/lib/systemd/syst
    #解释
    进程属于哪个用户
    进程pid
    进程占用CPU资源百分比
    进程占用物理内存百分比
    进程使用的虚拟内存(KB)
    进程占用的固定内存量(KB)
    进程在那个终端运行,如果内核能直接调用则显示?,tty1-tty6表示本机终端登录的用户进程,pts/0-255则表示远程登录用户的进程
    进程状态:R运行,s休眠,s包含子进程,T停止,Z僵尸,+后台进程
    进程启动时间
    占用cpu运算时间
    产生进程的命令
    
    #liunx多一个ppid的字段,ppid是父进程的ID号
    
    
##### top动态查看系统健康状态

- top命令动态查看系统性能及状态信息

- 命令格式:top   [选项...]

- 常用选项:-d   #指定刷新秒数,默认为3秒刷新一次

- 交互界面显示指令

  - 键盘上下键翻行
  - h   #获取交互模式帮助
  - P    #按照cpu使用资源排序
  - M   #按照内存使用资源排序
  - q    #退出

  ```bash
  [root@localhost ~]# top
  top - 01:11:42 #当前系统时间 
  up  9:22,  #系统运行时间,该系统已经运行9小时22分钟
  3 users, #当前系统登录用户数量 
  load average: 0.00, 0.01, 0.05 #cpu1分钟,5分钟,15分钟之前的平均负载量,根据CPU核数判断系统CPU负载量,1核CPU若高于1代表负载过高,2核CPU若高于2代表负载过高一次类推
  
  Tasks: 214 total, #当前系统中的进程总数量 
  1 running,#正在运行的进程数量 
  213 sleeping, #正在休眠进程数总量
  0 stopped,  #正在停止的进程
  0 zombie#僵尸进程数量,僵尸进程是当子进程比父进程先结束,而父进程有没有回收子进程占用的资源,此时子进程会成为一个僵尸进程
  
  %Cpu(s):  0.0 us, #用户占用的cpu百分比
  0.1 sy,#系统占用的cpu百分比
  0.0 ni,#改变过优先级的用户占用的cpu百分比
  99.9 id,#空闲的cpu百分
  0.0 wa,#等待输入/输出的进程的占用cpu百分比
  0.0 hi,#硬中断请求服务占用的CPU百分比
  0.0 si, #软中断请求服务占用的cpu的百分比
  0.0 st#虚拟时间百分比,当有虚拟机时,虚拟CPU等待实际CPU的事件百分比
  
  KiB Mem :  1865308 total, #物理内存总量,单位kb
  206380 free,#空闲内存总量,单位kb
  881692 used,#已使用的内存总量,单位kb
  777236 buff/cache#块设备与普通文件占用的缓存数量
  
  KiB Swap:  2097148 total,#交换空间总量,单位kb
  2097148 free, #空闲交换空间总量,单位kb
  0 used. #已使用的交换空间总量,单位kb  
  739012 avail Mem #可用于进程下一次分配的物理内存数量
  
   PID #进程pid号
   USER #进程所有者用户名
   PR#进程优先级执行顺序,越小有限被执行
   NI#负值表示高级优先级,正值表示低优先级,越小越优先    
   VIRT #进程使用的虚拟内存总量单位kb
   RES#进程使用的、未被换出的物理内存大小,单位kb
   SHR#共享内存大小,单位kb
   S #进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止  Z=僵尸进程 
   %CPU#进程使用的cpu百分比
   %MEM#进程使用的物理内存百分比
   TIME+#进程使用的cpu时间总计,单位1/100秒
   COMMAND #命令名/命令行
   
   #查找僵尸进程及父进程
   [root@localhost ~]# ps -A -o stat,ppid,pid,cmd | grep "^Zz"
  命令解释:-A 列出所有进程
  -o   自定义输出字段,我们设定显示字段为stat(状态),ppid(父进程),pid(进程id),cmd(这四个参数),因为状态为z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ的进程
  
  
  #杀死进程
  kill  -9  父进程号
检索进程
  • pgrep通过匹配程序名,找到匹配的进程

  • 命令格式:pgrep [选项...] [参数...]

  • 常用选项:

    • -l #输出进程名与pid
    • -U #检索指定用户进程
    • -t #检索指定终端进程
    • -t #精确匹配完成进程名
    #查看ssh服务的进程
    [root@localhost ~]# pgrep ssh
    1213
    20218
    21001
    21234
    #查看服务的完整进程以及pid
    [root@localhost ~]# pgrep -l ssh
    1213 sshd
    20218 ssh-agent
    21001 sshd
    21234 sshd
    #指定用户查询进程
    [root@localhost ~]# pgrep -U visitor
    #查看系统所有终端用户
    [root@localhost ~]# who
    root     pts/1        2022-08-18 01:04 (192.168.0.1)
    root     pts/2        2022-08-19 00:15 (192.168.0.1)
    root     :0           2022-08-18 01:04 (:0)
    #过滤用户在指定中断开启的进程信息
    [root@localhost ~]# pgrep -lu  root -t pts/2
    21238 bash
    
    
进程的前后台调度
  • & #将进程放入后台运行

  • jobs -l #查看后台进程列表

  • fg 进程编号 #将后台进程恢复至前台运行

  • Ctrl+z #挂起当前程序进程并放入后台

  • bg 进程编号 #激活后台

    [root@localhost ~]# sleep 5m &
    [1] 21892
    [root@localhost ~]# jobs -l
    [1]+ 21892 运行中               sleep 5m &
    [root@localhost ~]# 
    [root@localhost ~]# fg 1
    sleep 5m
    [root@localhost ~]# fg 1
    sleep 5m
    ^Z
    [1]+  已停止               sleep 5m
    [root@localhost ~]# jobs -l
    [1]+ 21892 停止                  sleep 5m
    [root@localhost ~]# bg 1
    [1]+ sleep 5m &
    [root@localhost ~]# jobs -l
    [1]+ 21892 运行中               sleep 5m &
    [root@localhost ~]# 
    
    
杀死进程
  • 杀死进程的方式

  • Ctrl+c结束当前进程

  • kill [选项..] pid

    • 常用选项 -l #列出可用进程信号
    • 常用信号 -1 重启进程,-9强制杀死进程,-15正常杀死进程(默认)
  • killall -9 进程名 #强制杀死进程

  • killall -9 -u 用户名 #强制杀死该用户所有进程

  • pkill -9 进程名 #强制杀死进程

    • 常用选项:-t 终端号 #踢除终端用户
    [root@localhost ~]# sleep 5m &
    [1] 22021
    [root@localhost ~]# sleep 4m &
    [2] 22022
    [root@localhost ~]# sleep 7m &
    [3] 22031
    [root@localhost ~]# jobs -l
    [1]  22021 运行中               sleep 5m &
    [2]- 22022 运行中               sleep 4m &
    [3]+ 22031 运行中               sleep 7m &
    [root@localhost ~]# kill 22021
    [root@localhost ~]# jobs -l
    [1]  22021 已终止               sleep 5m
    [2]- 22022 运行中               sleep 4m &
    [3]+ 22031 运行中               sleep 7m &
    [root@localhost ~]# 
    [root@localhost ~]# kill -9  22022
    [root@localhost ~]# jobs -l
    [2]- 22022 已杀死               sleep 4m
    [3]+ 22031 运行中               sleep 7m &
    [root@localhost ~]# 
    [root@localhost ~]# killall sleep
    [3]   已终止               sleep 7m
    [4]-  已终止               sleep 7m
    [5]+  已终止               sleep 6m
    [root@localhost ~]# jobs -l
    [root@localhost ~]# 
    [root@localhost ~]# killall -9 sleep
    [1]-  已杀死               sleep 6m
    [2]+  已杀死               sleep 7m
    [root@localhost ~]# jobs -l
    [root@localhost ~]# 
    [root@localhost ~]# killall -9 -u visitor 
    [root@localhost ~]# who
    root     pts/1        2022-08-18 01:04 (192.168.0.1)
    root     pts/2        2022-08-19 00:15 (192.168.0.1)
    root     :0           2022-08-18 01:04 (:0)
    [root@localhost ~]# 
    [root@localhost ~]# pkill sleep
    [1]-  已终止               sleep 6m
    [2]+  已终止               sleep 7m
    [root@localhost ~]# 
    [root@localhost ~]# who
    visitor  pts/0        2022-08-19 01:37 (192.168.0.1)
    root     pts/1        2022-08-18 01:04 (192.168.0.1)
    root     pts/2        2022-08-19 00:15 (192.168.0.1)
    root     :0           2022-08-18 01:04 (:0)
    [root@localhost ~]# pkill -9 -t pts/0
    [root@localhost ~]# who
    root     pts/1        2022-08-18 01:04 (192.168.0.1)
    root     pts/2        2022-08-19 00:15 (192.168.0.1)
    root     :0           2022-08-18 01:04 (:0)
    [root@localhost ~]# 
    
    
用户登录分析
  • users who w #查看已登录的用户信息(详细度不同)

  • last #显示登录成功的用户信息

  • lastb #显示登录失败的用户信息

    [root@localhost ~]# users 
    root root root
    [root@localhost ~]# 
    [root@localhost ~]# who
    root     pts/1        2022-08-18 01:04 (192.168.0.1)
    root     pts/2        2022-08-19 00:15 (192.168.0.1)
    root     :0           2022-08-18 01:04 (:0)
    [root@localhost ~]# 
    [root@localhost ~]# w
     01:44:12 up 11:04,  3 users,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/1    192.168.0.1      四01   24:25m  0.03s  0.03s -bash
    root     pts/2    192.168.0.1      00:15    4.00s  0.60s  0.05s w
    root     :0       :0               四01   ?xdm?   3:30   0.97s /usr/libexec/gnome-session-binary --ses
    [root@localhost ~]# 
     [root@localhost ~]# last
    visitor  pts/0        192.168.0.1      Fri Aug 19 01:37 - 01:39  (00:02)    
    visitor  pts/0        192.168.0.1      Fri Aug 19 01:36 - 01:36  (00:00)    
    root     pts/2        192.168.0.1      Fri Aug 19 00:15   still logged in   
    root     pts/1        192.168.0.1      Thu Aug 18 01:04   still logged in   
    root     :0           :0               Thu Aug 18 01:04   still logged in   
    visitor  pts/2        192.168.0.1      Wed Aug 17 01:18 - 01:49  (00:31)    
    root     pts/1        192.168.0.1      Wed Aug 17 00:52 - 01:49  (00:57)    
    root     pts/0        192.168.0.1      Tue Aug 16 22:35 - 00:23 (2+01:47)   
    root     pts/0        192.168.0.1      Tue Aug 16 09:53 - 21:29  (11:35)    
    reboot   system boot  3.10.0-862.el7.x Tue Aug 16 09:52 - 01:51 (2+15:59)   
    root     pts/1        192.168.0.1      Tue Aug 16 00:08 - crash  (09:43)    
    root     pts/0        192.168.0.1      Mon Aug 15 11:27 - crash  (22:24)    
    reboot   system boot  3.10.0-862.el7.x Mon Aug 15 11:07 - 01:51 (3+14:43)   
    test2    pts/1        192.168.0.1      Mon Aug 15 00:01 - 00:01  (00:00)    
    test2    pts/1        192.168.0.1      Mon Aug 15 00:00 - 00:01  (00:00)    
    test2    pts/1        192.168.0.1      Sun Aug 14 23:56 - 00:00  (00:03)    
    root     pts/0        192.168.0.1      Sun Aug 14 23:45 - down   (03:22)    
    visitor  pts/0        192.168.0.1      Fri Aug 12 01:55 - 03:15  (01:20)    
    root     pts/1        192.168.0.1      Thu Aug 11 23:59 - 03:15  (03:16)    
    root     pts/0        192.168.0.1      Wed Aug 10 00:20 - 01:44 (2+01:23)   
    root     pts/3        192.168.0.1      Tue Aug  9 01:21 - 00:11 (2+22:49)   
    root     pts/1        192.168.0.1      Mon Aug  8 02:22 - 22:54 (-325+-3:-28
    root     pts/0        192.168.0.1      Mon Aug  8 01:18 - 22:07 (-325+-3:-11
    root     pts/2        192.168.0.1      Sat Aug  6 00:35 - 01:23 (3+00:48)   
    root     pts/1        192.168.0.1      Fri Aug  5 02:00 - 02:33 (1+00:32)   
    root     pts/0        192.168.0.1      Thu Aug  4 21:37 - 02:25 (1+04:48)   
    root     pts/2        192.168.0.1      Thu Aug  4 19:10 - 23:35  (04:25)    
    root     pts/1        192.168.0.1      Thu Aug  4 00:02 - 23:02  (23:00)    
    root     :0           :0               Wed Aug  3 10:17 - down  (11+16:50)  
    root     pts/0        192.168.0.1      Wed Aug  3 10:11 - 19:31 (1+09:20)   
    reboot   system boot  3.10.0-862.el7.x Wed Aug  3 10:08 - 03:07 (11+16:58)  
    
    wtmp begins Wed Aug  3 10:08:38 2022
    [root@localhost ~]# lastb 
    visitor  ssh:notty    192.168.0.1      Wed Aug 17 01:18 - 01:18  (00:00)    
    visitor  ssh:notty    192.168.0.1      Fri Aug 12 01:54 - 01:54  (00:00)    
    visitor  ssh:notty    192.168.0.1      Fri Aug 12 01:54 - 01:54  (00:00)    
    
    btmp begins Fri Aug 12 01:54:41 2022
    [root@localhost ~]# 
    
    
posted @ 2022-08-19 01:53  国家保护废物  阅读(47)  评论(0)    收藏  举报