• 系统管理之进程与工作管理


    一、进程管理

    1、进程介绍
    1、进程与程序
    • 进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体, 都有自己的地址空间,并占用一定的系统资源。
    • 程序是人使用计算机语言编写的 可以实现特定目标或解决特定问题的代码集合。
    2、进程管理作用
    • 判断服务器健康状态:我们应该在服务器出现问题,但是还没有造成服务器宕机或停止服务时,就人为干预解决了问题。进程管理最主要的工作就是判断服务器当前运行是否健康,是否需要人为干预。如果服务器的 CPU 占用率、内存占用率过高,就需要人为介入解决问题了。
    • 查看系统中所有的进程:我们需要查看系统中所有正在运行的进程,通过这些进程可以判断 系统中运行了哪些服务,是否有非法服务运行。
      杀死进程:这是进程管理中最不常用的手段,只有当正确终止进程的手段失效的情况下,才使用强制手段杀死进程。
    2、进程相关命令
    1、ps命令
    1. ps 命令使用
      ps 命令是用来静态显示系统中进程的命令。不过这个命令有些特殊,它的部分命令的选项不能加 入“-”,比如命令“ps aux”,其中“aux”是选项,但是这个选项不能加入“-”。这是因为 ps 命令的部分选项需要遵守 BSD 操作系统的格式。所以 ps 命令的常用选项的组合是固定的。
    选项:  
    a:   显示一个终端的所有进程,除了会话引线  
    u:   显示进程的归属用户及内存的使用情况  
    x:   显示没有控制终端的进程
    -l:  长格式显示。显示更加详细的信息  
    -e:  显示所有进程,和-A 作用一致 
    [root@centos ~]# ps -aux  #结果虽然一致,但是这里出现了警告信息
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    

    2)ps输出信息解释

    [root@centos ~]# ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.2  0.3  19344  1536 ?        Ss   16:46   0:02 /sbin/init
    
    USER    用户
    PID     进程ID
    %CPU    cpu占有率
    %MEN    内存占有率
    VSZ     虚拟内存使用大小,单位为KB
    RSS     真实内存使用大小
    TTY     登录终端,其中 tty1-tty7 代表本地控制台终端(可以通过 alt+F1-F7 键切换不同的终端),tty1-tty6 是本地的字符界面终端,tty7 是图形终端。 
            pts/0-255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用的是 pts/0 终端, 第二个远程连接占用 pts/1,依次增
    STAT
    D:不可被唤醒的睡眠状态,通常用于 I/O 情况
    R:该进程正在运行 
    S:该进程在睡眠状态,可被唤醒 
    T:停止状态,可能是在后台暂停或进程在除错状态 
    W:内存交互状态(从 2.6 内核开始无效) 
    X:死掉的进程(应该不会出现) 
    Z:僵尸进程。进程已经终止,但是部分程序还在内存当中。 
    <:高优先级(以下状态在 BSD 格式当中出现) 
    N:低优先级 
    L:被锁入内存 
    s:包含子进程 
    l:多线程(小写 L) 
    +:位于后台 
    STRART  进程已启动时间
    TIME    该进程占用cpu时间
    COMMAND 产生此进程的命令名
    
    [root@centos ~]# ps -le
    F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S     0      1      0  0  80   0 -  4836 poll_s ?        00:00:02 init
    
    F    进程标志,1:进程可以复制,但是不能执行 ,4:进程使用超级用户权限   
    S    进程状态 与ps aux 中stat信息一致
    UID  用户ID
    PID  进程ID
    PPID 父进程ID
    C    cpu使用率,百分比
    PRI  进程优先级,越小越先执行
    NI   进程优先级
    ADDR 该进程在内存中的地址
    SZ   内存使用
    WCHAN 是否正在运行,- 代表正在运行
    TTY  用户终端
    TIME  cpu占用时间
    CMD   执行的命令
    
    2、top命令

    1)top命令使用

    [root@centos ~]# top [选项] 
    1)选项:  
    -d 秒数: 指定 top 命令每隔几秒更新。默认是 3 秒  
    -b:  使用批处理模式输出。一般和“-n”选项合用,用于把 top 命令重定向到文件中  
    -n 次数: 指定 top 命令执行的次数。一般和“-b”选项合用  
    -p:  指定 PID。只查看某个 PID 的进程  
    -s:  使 top 在安全模式运行,避免在交互模式中出现错误  
    -u 用户名: 只监听某个用户的进程 
    
    2)在 top 命令的交互模式当中可以执行的命令:  
    ?或 h:  显示交互模式的帮助  
    P:  以 CPU 使用率排序,默认就是此项  
    M:   以内存的使用率排序  
    N:   以 PID 排序  
    T:   按照 CPU 的累积运算时间排序,也就是用 TIME+项排序  
    k:   按照 PID 号,给予某个进程一个信号。一般用于终止某个进程,信号 9是强制终止的信号  
    r:   按照 PID 号,给某个进程重设优先级(Nice)值  
    q:   退出 top
    
    
    3、 pstree 命令

    pstree显示当前进程组成的进程树。

    [root@localhost ~]# pstree [选项] 
    选项:  
    -p: 显示进程的 PID  
    -u: 显示进程的所属用户
    init─┬─abrtd
         ├─acpid
         ├─atd
         ├─auditd───{auditd}
         ├─automount───4*[{automount}]
         ├─certmonger
         ├─crond
         ├─cupsd
         ├─dbus-daemon
         ├─dhclient
         ├─hald─┬─hald-runner─┬─hald-addon-acpi
         │      │             └─hald-addon-inpu
         │      └─{hald}
         ├─httpd───3*[httpd───26*[{httpd}]]
         ├─master─┬─pickup
         │        └─qmgr
         ├─mcelog
         ├─6*[mingetty]
         ├─rpc.statd
         ├─rpcbind
         ├─rsyslogd───3*[{rsyslogd}]
         ├─sshd───sshd───bash───pstree
         └─udevd───2*[udevd]
    
    3、进程管理

    系统中可以识别的信号较多,我们可以使用命令 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	
    

    这里只解释一些常用的信号

    1 SIGHUP 该信号让进程立即关闭,然后重新读取配置文件之后重启。
    2 SIGINT 程序终止信号,用于终止前台进程,相当于输出 ctrl+c 快捷键。
    9 SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞处理和忽略。一般用于强制终止进程。
    15 SIGTERM 正常结束进程的信号,kill 命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试 SIGKILL 信号,也就是信号 9。
    18 SIGCONT 该信号可以让暂停的进程恢复执行。
    19 SIGSTOP 该信号可以暂停前台进程,相当于输入 ctrl+z 快捷键。
    

    1)kill命令

    [root@centos ~]# kill [信号] PID 
    [root@centos ~]# kill -1 1331   #重启进程号为1331的服务
    

    2)killall 命令

    [root@centos ~]# killall [选项][信号] 进程名 
    选项:  
    -i: 交互式,询问是否要杀死某个进程  
    -I: 忽略进程名的大小写
    
    #交互式杀死ssh服务
    [root@centos ~]# ps aux | grep "sshd" | grep -v "grep"
    root       1573  0.0  0.2  66236  1204 ?        Ss   18:28   0:00 /usr/sbin/sshd
    root       1875  0.0  0.9 104616  4584 ?        Ss   18:29   0:00 sshd: root@pts/0 
    # 查询系统有 2 个 sshd 进程,sshd服务主进程,一个远程终端登录
    [root@centos ~]# killall -i sshd
    Kill sshd(1573) ? (y/N) y  #  这个进程是 sshd 的服务进程,如果杀死,所有的 sshd 连接都不能登录。
    Kill sshd(1875) ? (y/N) n  # 这是我当前登录终端,一旦杀死,我也会掉线
    

    3)pkill 命令
    pkill 命令和 killall 命令非常类似,也是按照进程名来杀死进程。

    [root@centos ~]# pkill [选项] [信号] 进程名 
    选项:  
    -t 终端号: 按照终端号踢出用户 
    
    [root@centos ~]# pkill -9 -t pts/0
    # 强制杀死从 pts/0 虚拟终端登录的进程
    

    二、工作管理

    1 工作管理简介
    • 前台是指当前可以操控和执行命令的这个操作环境,后台是指工作可以自行运行,但是不能直接用 ctrl+c 来终止它,只能使用 fg/bg 来调用工作.
    • 当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作。如 tty1 登 录的终端是不能管理 tty2 终端中的工作的
    • 放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作。
    • 放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行。比如 vim 命令放入后台只能暂停,而不能执行,
      因为 vim 需要前台输入信息。
    2 如何把命令放入后台

    1)使用 ”空格 &“ 在命令后。

    #压缩一下/etc目录
    [root@centos ~]# tar -zcf etc.tar.gz /etc &
    [1] 2072
    [1]+  Done                    tar -zcf etc.tar.gz /etc
    如果出现 done 证明后台这个任务已经完成了,当然命令如果有执行结果的话,也会显示到操作终端上。
    [1]是 这个命令的工作号,+号代表这个任务是最近一个被放入后台的工作
    

    2)、 第二种方法是在命令执行过程中按 ctrl+z 快捷键,命令在后台是暂停状态.

    [root@centos ~]# tar -zcf etc.tar.gz /etc
    tar: Removing leading `/' from member names
    tar: Removing leading `/' from hard link targets
    ^Z
    [root@centos ~]# jobs  #jobs可以查看当前后台命令
    [1]+  Stopped                 tar -zcf etc.tar.gz /etc
    
    3 后台命令管理

    1)、 查看后台的工作

    [root@centos ~]# jobs [-l] 
    选项:  
    -l  显示工作的 PID
    

    2)、 将后台暂停的工作恢复到前台执行

    [root@centos ~]# fg %工作号 
    参数:  %工作号: %号可以省略,但是注意工作号和 PID 的区别 
    

    3)、 把后台暂停的工作恢复到后台执行

    [root@centos ~]# bg %工作号
    

    4)、 后台命令脱离登录终端运行
    我们已经知道把命令放入后台,只能在当前登录终端执行。如果我是远程管理的服务器,在远程终端中执行了后台命令,这时我退出登录,这个后台命令会被终止但是我们有需要某些命令一直执行,以下是三种方法

    • 1、第一种方法是把需要后台执行的命令加入/etc/rc.local 文件,让系统在启动时执行这个后台程序。
    • 2、第二种方法是使用系统定时任务,让系统在指定的时间执行某个后台命令。这样放入后台的命令与终端无关,是不依赖登录终端的。
    • 3、最后一种方法是使用 nohup 命令。 nohup 命令的作用就是让后台工作在离开操作终端时,也能够正确的在后台执行。
    [root@centos ~]# nohup [命令] & 
    [root@centos ~]# nohup find / -print  > /root/file.log  & 
    用 find 命令,打印 / 下所有文件。放入后台执行,将输出信息定向到file.log文件中。
    [root@centos ~]# nohup find / -print &   #不指定文件,则默认忽略输入并把输出追加到"nohup.out"
    [2] 2173
    [root@centos ~]# nohup: ignoring input and appending output to `nohup.out'
    
    
  • 相关阅读:
    百度脑图源码
    H5与Native交互的实现
    【GOF23设计模式】建造者模式
    【GOF23设计模式】工厂模式
    【GOF23设计模式】单例模式
    Linux符设备驱动编程
    linux多线程编程——读者优先、写者优先问题
    建立makefile
    构建交叉开发环境
    Failed to create the part's controls解决方法
  • 原文地址:https://www.cnblogs.com/hjnzs/p/12022898.html
Copyright © 2020-2023  润新知