zoukankan      html  css  js  c++  java
  • Linux进程作业的查看和杀死

    一、引入进程

    1、内存划分为:用户空间和内核空间

      1、在用户空间里运行的进程,就是用户进程,所属的状态为用户态

      2、在内核空间里运行的进程,就是系统进程,所属的状态为内核态

        例:执行内核里的代码的时候,就是属于内核态。

    Linux的kernel其实就是一个软件,比较核心而已。

    内核作用:

      1.对cpu进行调度管理

      2.对内存进行管理

      3.对进程进行管理

      4.对文件系统进行管理

      5.对其他的硬件管理

    2、内核空间的进程可以访问用户空间,但是用户空间的进程不能访问内核空间。

     

    二、进程

      process是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源(内存、CPU)分配和调度的一个独立单位。

    1、进程控制块(PCB)

      是系统感知进程存在的唯一凭证,是数据结构,占用内存空间。

    2、进程上下文

      1、上文:已执行过的进程指令和数据在相关寄存器和堆栈中的内容称为上文。

      2、正文:正在执行的指令和数据在相关寄存器和堆栈中的内容。

      3、下文:待执行的指令和数据在相关寄存器和堆栈中的内容。

    进程上下文切换:

      指多任务系统中,CPU的控制权由运行任务,转移到另外一个就绪任务时所发生的事件;当前运行任务转为就绪(或者挂起、删除)状态,另一个被选定的就绪任务成为当前任务。

    3、线程

      thread只能归属于一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程。

    简而言之:

      1、一个程序至少有一个进程,一个进程至少有一个线程;

      2、线程的划分尺度小于进程,使得多线程程序的并发性高;

      3、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

    shell> echo $PPID    //查看父进程ID
    2100
    
    shell> echo $$    //查看当前进程ID
    2102

     

    三、ps命令

      用于查看os进程信息。

    1、ps命令查看这些数据

      1、描述信息:pid 进程名 父子shell的家族关系等

      2、控制信息:进程当前状态、进程优先级等

      3、资源管理信息:占多少内存,打开了多少个文件等

      4、cpu现场保护结构

    注意:ps命令查看静态的进程统计信息。

    2、常见ps命令

    shell> ps aux 或 ps -elf

    a:显示当前终端启动的进程

    u:显示用户为主的进程信息

    x:显示所有进程信息

    -e:显示系统内的所有进程信息

    -l:使用长格式显示进程信息

    -f:使用完整的格式显示进程信息

    [root@localhost ~]# ps aux
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

    解析:

      PID   进程的ID;

      %CPU  进程占用的CPU百分比;

      %MEM  占用内存的百分比;

      COMMAND 命令的名称和参数

    [root@localhost ~]# ps -elf
    F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD

    解析:

      R 正在运行,在可中断队列中(就绪状态);

      S 处于休眠状态,静止状态;

      Z 僵尸进程不存在但暂时无法消除;

     

     

    四、top命令

      查看动态的进程排名信息。

    1、命令行直接top命令

    [root@localhost ~]# top

     

    等待输入……

      h获得帮助

      1:显示各CPU情况

      P:按%CPU排序

      M:按%MEM排序

      空格:马上刷新(默认3秒)

      q:退出(默认的top会一直占用当前端口)

    解析:load average: 0.06, 0.60, 0.48

      表示系统负载,即任务队列的平均长度。

      三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。(w和uptime也可以查看top的顶头信息)

    2、top命令常接选项

    [root@localhost ~]# top -d 1 -n 5 -p 1

    -d 1    指定刷新间隔时间为1秒

    -n 5    刷新次数

    -p 1    显示指定PID为1的进程信息,如果要指定多个PID,用逗号分开

     

     

    五、其他查看进程的命令 

    1、pstree命令:以树型结构显示各进程间的关系

    shell> pstree

    init─┬─abrtd
         ├─acpid
         ├─atd
         ├─auditd───{auditd}
         ├─automount───4*[{automount}]
         ├─certmonger
         ├─console-kit-dae───63*[{console-kit-da}]
         ├─crond
         ├─cupsd
         ├─dbus-daemon
         ├─hald─┬─hald-runner─┬─hald-addon-acpi
         │      │             └─hald-addon-inpu
         │      └─{hald}
         ├─irqbalance
         ├─login───bash
         ├─mcelog
         ├─5*[mingetty]
         ├─mysqld_safe───mysqld───28*[{mysqld}]
         ├─rpc.statd
         ├─rpcbind
         ├─rsyslogd───3*[{rsyslogd}]
         ├─2*[sendmail]
         ├─sshd─┬─sshd───bash───pstree
         │      └─sshd───bash───mysql
         ├─udevd───2*[udevd]
         ├─vsftpd
         ├─xinetd
         └─zabbix_agentd───5*[zabbix_agentd]

    常接命令选项-p:列出进程的PID号

    注意:使用{}的是进程的线程。

     

    2、pgrep命令:根据特定条件查询进程PID信息

    [root@localhost ~]# pgrep init
    1
    [root@localhost ~]# pgrep -l init
    1 init
    [root@localhost ~]# pgrep -l -u root -t pts/2
    11567 bash

    -l:列出进程的名称

    -u:根据进程所属的用户名进行查找

    -t:根据进程所在的终端进行查找

    ……比较少用,特殊情况下会用用。

     

     

    六、进程的优先级

      Linux内核的基本任务是调度进程,每个进程受两个参数影响其调度。

    1、优先级(priority):内核控制动态变化

      值越小越早被cpu执行,用户无法直接调整数值大小。

    2、niceness:进程可被执行的优先级的修正数值(可以人工修改)

    1、用nice命令开新的nice(新开启的进程),以新的nice来启动命令
    nice -10 vi &  //设置nice值为10
    nice --10 vi &  //设置nice值为-10
    
    2、用renice命令设置新nice(已经存在的进程)
    renice 10 15132  //设置nice值为10
    renice -10 15132  //设置nice值为-10
    
    3、用top命令修改进程的优先级
      先输入r,然后输入pid,最后输入优先级

     

     

    七、作业控制机制

      前台启动:用户输入命令,直接执行程序

      后台启动:在命令行尾加入“&”符号,让进程切入后台执行

      bg命令:将后台停止的进程,在后台重新运行

    [root@localhost lianxi]# jobs  //查看后台作业信息
    [1]+  Stopped      vim num.txt
    [2]-  Killed       cp -i -r /mnt/* /tmp
    
    + :最新放到后台的进程
    - :仅次于最新放到后台的进程
    
    [root@localhost lianxi]# fg  //将后台的进程调到前台

      fg将处于后台的进程恢复到前台运行,需指定作业号,不指定作业号,将恢复有“+”标记的进程。

     

     

    八、kill命令

      kill命令的实现是基于OS的“信号机制”。信号机制除了基本通知功能外,还可以传递附加信息。详解参考:http://www.cnblogs.com/geaozhang/p/6874310.html

    shell> kill –l  #列出linux系统支持的信号种类

    格式:

      kill –信号代码 PID

    原理:kill命令用来发送信号(软中断信号),进程收到信号后采取的行动:终止、忽略、挂起

     

    1、kill和killall的区别:

      kill    后面写进程ID,不能写进程名

      killall 后面写进程名,不能写进程ID,会将相同名字的进程一起杀死

    2、pkill命令:根据“特定条件”终止相应的进程

      -u:根据进程所属的用户名终止相应进程

      -t:根据进程所在的终端终止相应进程

    shell> pkill mysqld  #强行终止mysqld服务进程

  • 相关阅读:
    类型转换
    关于lseek()
    ubuntuj开机没有开机音乐
    Linux下PF_PACKET的使用
    运行apue下的第一个程序
    Spring Framework 开发参考手册
    mysql blob
    此驱动程序不支持 Java Runtime Environment (JRE) 1.6 版。请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库
    [转]解决:The Apache Tomcat Native library which allows optimal performance in production environments was not found
    java等号
  • 原文地址:https://www.cnblogs.com/geaozhang/p/6910151.html
Copyright © 2011-2022 走看看