zoukankan      html  css  js  c++  java
  • [Linux]——进程管理相关

    一些概念

    程序program:通常以二进制程序放置在存储媒介中,以物理文件形式存在

    进程process:程序通过用户执行被触发后,执行者的权限与属性、程序的代码和所需数据会被加载到内存中,OS给予这个内存单元一个标识符(PID)。可以说,进程就是一个正在运行的程序。

    进程是如何产生的?

                    

    父/子进程

    PPID与PID:

    登录Linux后我们会取得一个bash的shell,而Linux之所以被称为一个“多用户环境”,就是因为每个人登陆后取得的shell的PID不同。

    而用这个bash提供的接口去运行另一些指令程序,也会触发成为PID。他们之间这种“我中产生了你”关系,我们就称作父进程和子进程。

    [root@centos1 ~]# bash   # bash下再触发一个新bash
    [root@centos1 ~]# ps -l  # 在这个bash下再触发ps命令
    F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S     0 126053 126049  0  80   0 - 27117 wait   pts/3    00:00:00 bash
    0 S     0 127272 126053  0  80   0 - 27117 wait   pts/3    00:00:00 bash
    4 R     0 127289 127272  0  80   0 - 27033 -      pts/3    00:00:00 ps

    父子进程互相间的调用:

                                         

    常驻系统中的进程:

    有很多触发的指令程序都是执行完就很快终止了的,但系统总要有一些服务各用户任务的功能需要一直常驻在内存中运行。我们称之为“服务(daemon)”

    系统的服务非常的多, 不过主要大致分成系统本身所需要的服务,例如crond 、 atd、rsyslogd 等等。还有一些则是负责网络连接的服务,例如 Apache, named, postfix, vsftpd等等

    Job Control

    jobs  查看job

    -l:列出PID
    -s:仅列出在后台处于暂停状态stop的job
    -r:仅列出在后台处于运行状态run的job

     &  将job放到后台去“执行”

    [root@centos1 ~]# tar -zvpcf /tmp/py3.tar.gz /py3 >/tmp/log.txt 2>&1 &
    [1] 128365
    [root@centos1 ~]# echo "aa"    #128365这个job放到后台后,我们可以在前台做任意别的job
    aa
    [1]+ Done tar -zvpcf /tmp/py3.tar.gz /py3 > /tmp/log.txt 2>&1 #当128365执行完它会出现Done

    Ctrl+z   将当前的job放到后台中“暂停”Stopped

    [root@centos1 ~]# vim  ~/.bashrc
    ^Z
    [1]+ Stopped                 vim ~/.bashrc
    [root@centos1 ~]# find / -print
    ^Z 
    [2]+  Stopped                 find / -print
    
    [root@centos1 ~]# jobs -l
    [1]- 128722 Stopped vim ~/.bashrc
    [2]+ 128754 Stopped find / -print

    bg  把后台Stopped的job重新再后台Running起来(bg=backgroup)

    [root@centos1 ~]# find / -perm +7000 >/tmp/text.txt
    ^Z
    [3]+ Stopped find / -perm +7000 > /tmp/text.txt
    
    [root@centos1 ~]# jobs; bg %3; jobs
    [1]- Stopped vim ~/.bashrc
    [2] Stopped find / -print
    [3]+ Stopped find / -perm +7000 > /tmp/text.txt
    [3]+ find / -perm +7000 > /tmp/text.txt &
    [1]+ Stopped vim ~/.bashrc
    [2] Stopped find / -print
    [3]- Running find / -perm +7000 > /tmp/text.txt &

    fg  将后台Stopped的job放回到前台(fg=foregroup)
    fg %jobnumber

    [root@centos1 ~]# jobs -l
    [1]- 128722 Stopped vim ~/.bashrc
    [2]+ 128754 Stopped find / -print
    [root@centos1 ~]# fg %1 
    #回到vim ~/.bashrc的界面
    # ctrl+z
    [1]+ Stopped vim ~/.bashrc
    [root@centos1 ~]# jobs -l
    [1]+ 128722 Stopped vim ~/.bashrc
    [2]- 128754 Stopped find / -print

    kill  管理后台当中的job

    -9    强制删除一个job

    -15  以正常的程序方式终止一个job

    [root@centos1 ~]# jobs -l    
    [1]+ 128722 Stopped                 vim ~/.bashrc
    [2]  128754 Stopped                 find / -print
    [root@centos1 ~]# kill %2 ; jobs
    [1]+  Stopped                 vim ~/.bashrc
    [2]   Stopped                 find / -print
    [2]   Terminated              find / -print
    [root@centos1 ~]# jobs -l       
    [1]+ 128722 Stopped                 vim ~/.bashrc
    [root@centos1 ~]# kill -9 %1 ; jobs 
    [1]+  Stopped                 vim ~/.bashrc
    [1]+  Killed                  vim ~/.bashrc

    ps 命令

    ps aux输出信息:

    [root@centos1 ~]# ps -l
    F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S     0   8863   8859  0  80   0 - 27117 wait   pts/0    00:00:00 bash
    4 R     0   9090   8863  0  80   0 - 27035 -      pts/0    00:00:00 ps
    [root@centos1 ~]# ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.1  19360  1376 ?        Ss   Aug27   0:09 /sbin/init
    root          2  0.0  0.0      0     0 ?        S    Aug27   0:00 [kthreadd]
    F process flags进程标识,说明权限

    4:表示权限为root

    1:表示此进程仅能进行复制而服务执行

    USER 进程属于哪个用户  
    PID 进程PID  
    %CPU 进程使用掉的CPU资源百分比  
    %MEM 进程占用掉的物理内存百分比  
    VSZ 进程使用掉的虚拟内存量(KB)  
    RSS 进程占用掉的固定内存量(KB)  
    TTY 进程是在哪个终端机上运行的

    pts/n:远程登录则显示动态终端窗口

    pts/0:表示网络连接进主机的进程

    tty1-tty6:表示本机登入的进程

    ?:表示与终端机无关

    STAT 进程当前的状态

    D 不可中断 uninterruptible sleep (usually IO)
    R 运行 runnable (on run queue)
    S 中断 sleeping
    T 停止 traced or stopped
    Z 僵死 a defunct (”zombie”) process

    <:高优先级
    n:低优先级
    s:包含子进程
    +:位于后台的进程组

    START 进程被触发启动的时间  
    TIME 进程实际使用cpu的时间  
    PRI priority 进程执行优先顺序 数值越小表示优先级越高
    NI Nice    进程执行优先级  
    SZ 此进程用掉多少内存  
    WCHAN 表示此进程是否运行中 -:表示正在运行中
    ADDR 表示进程在内存的哪一个部分 -:running进程
    COMMAND/CMD 所执行的命令command和参数arguments <defunct>:表示此进程为僵尸进程
    实例1:显示所有进程信息
    [root@centos1 ~]# ps -A
       PID TTY          TIME CMD
         1 ?        00:00:09 init
         2 ?        00:00:00 kthreadd
         3 ?        00:00:00 migration/0
         4 ?        00:00:01 ksoftirqd/0
         5 ?        00:00:00 migration/0
         6 ?        00:00:03 watchdog/0
    
    实例2:显示指定用户信息
    [root@centos1 ~]# ps -u root
       PID TTY          TIME CMD
         1 ?        00:00:09 init
         2 ?        00:00:00 kthreadd
         3 ?        00:00:00 migration/0
         4 ?        00:00:01 ksoftirqd/0
         5 ?        00:00:00 migration/0
         6 ?        00:00:03 watchdog/0
    
    实例3:显示所有进程信息,包括命令行,常配合grep使用
    [root@centos1 ~]# ps -ef 
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 Aug27 ?        00:00:09 /sbin/init
    root          2      0  0 Aug27 ?        00:00:00 [kthreadd]
    root     126304   1523  0 02:35 ?        00:00:00 sshd: root@notty 
    root     126308 126304  0 02:35 ?        00:00:00 /usr/libexec/openssh/sftp-server
    postfix  130724   1614  0 08:12 ?        00:00:00 pickup -l -t fifo -u
    
    [root@centos1 ~]# ps -ef |grep ssh
    root 994 126053 0 08:30 pts/3 00:00:00 grep ssh root 1523 1 0 Aug27 ? 00:00:00 /usr/sbin/sshd root 126049 1523 0 02:34 ? 00:00:01 sshd: root@pts/3 实例4:仅查看自己的bash相关的进程 [root@centos1 ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 R 0 1076 126053 0 80 0 - 27025 - pts/3 00:00:00 ps 4 S 0 126053 126049 0 80 0 - 27118 wait pts/3 00:00:00 bash 实例5:列出正在内存中的所有进程 [root@centos1 ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19360 1376 ? Ss Aug27 0:09 /sbin/init root 2 0.0 0.0 0 0 ? S Aug27 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Aug27 0:00 [migration/0] root 126053 0.0 0.2 108472 2056 pts/3 Ss 02:34 0:00 -bash root 126304 0.0 0.4 100376 4044 ? Ss 02:35 0:00 sshd: root@notty root 126308 0.0 0.2 57708 2252 ? Ss 02:35 0:00 /usr/libexec/openssh/sftp- postfix 130724 0.0 0.3 81380 3408 ? S 08:12 0:00 pickup -l -t fifo -u

    priority/niceness

    1.优先顺序(priority):内核控制;动态变化;用户不能直接调整大小;值越小越先被cpu执行。

    2.优先级(niceness):固定值;可被修改;和pr有关系:pr(新)=pr(老)+nice;
                                           root用户可设置的niceess值范围(-20—19)、自己或他人的进程、随意调整;
                                           普通用户可设置的niceness值范围(0—19)、自己的进程、只能调高;

    3.Nice优先级调整和设置:
      (1) nice --10
      (2) renice -10
      (3) 在top中按r

    top | htop 命令 

    《top详解》

    # top -b -n 2 >/tmp/top.txt    执行两次top并输出到文本中

    htop下载:https://mirrors.tuna.tsinghua.edu.cn/epel/6/x86_64/htop-1.0.3-1.el6.x86_64.rpm

    echo $$  获得当前bash的PID

    [root@centos1 software]# echo $$
    126053
    [root@centos1 software]# ps -l
    F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 R     0   2861 126053  0  80   0 - 27026 -      pts/3    00:00:00 ps
    4 S     0 126053 126049  0  80   0 - 27118 wait   pts/3    00:00:00 bash
    [root@centos1 software]# top -d 2 -p 126053
    top - 09:30:04 up 4 days, 10:00,  3 users,  load average: 0.00, 0.00, 0.00
    Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.0%us,  0.5%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   1004412k total,   894620k used,   109792k free,   117988k buffers
    Swap:  1022968k total,    17988k used,  1004980k free,   244112k cached
       PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                              
    126053 root      20   0  105m 2052 1552 S  0.0  0.2   0:00.41 bash   

    pstree 显示进程树

    # pstree
    # pstree -Aup

    pgrep 根据特定条件查找PID信息

    -P  +父进程(PPID) 可找到此父进程下所有子进程
    -l 列出进程名称
    -u  +用户名 查找以这个用户身份运行的进程
    -t 根据进程所在的终端进行查找
  • 相关阅读:
    SpringBoot整合jsp
    SpringBoot常用application.properties配置
    SpringBoot入门
    vue cli创建vue项目
    vue 指令
    vue hello
    pytest doc
    atom
    java csvutil
    Django uuidfield 实现自动生成唯一列,并设置为主键
  • 原文地址:https://www.cnblogs.com/snsdzjlz320/p/7493527.html
Copyright © 2011-2022 走看看