zoukankan      html  css  js  c++  java
  • Linux从入门到精通——系统的进程

     ####系统进程###

    进程概念:

      进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。

    在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了变化:它只是资源分配的单位,而不再是调度运行的单位。在微内核系统中,真正调度运行的基本单位是线程。因此,实现并发功能的单位是线程。

    线程概念:

      线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。例如,假设用户启动了一个窗口中的数据库应用程序,操作系统就将对数据库的调用表示为一个进程。假设用户要从数据库中产生一份工资单报表,并传到一个文件中,这是一个子任务;在产生工资单报表的过程中,用户又可以输人数据库查询请求,这又是一个子任务。这样,操作系统则把每一个请求――工资单报表和新输人的数据查询表示为数据库进程中的独立的线程。线程可以在处理器上独立调度执行,这样,在多处理器环境下就允许几个线程各自在单独处理器上进行。操作系统提供线程就是为了方便而有效地实现这种并发性

    引入线程的好处:

    (1)易于调度。

    (2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。

    (3)开销少。创建线程比创建进程要快,所需开销很少。。

    (4)利于充分发挥多处理器的功能。通过创建多线程进程(即一个进程可具有两个或更多个线程),每个线程在一个处理器上运行,从而实现应用程序的并发性,使每个处理器都得到充分运行。

    进程和线程的关系:

    (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。

    (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。

    (3)处理机分给线程,即真正在处理机上运行的是线程。

    (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步



    1.什么是进程
        进程就是系统未完成并且正在进行的工作。

    2.如何查看进程
       (1)图形方式查看
          gnome 系统桌面  gnome—system-monitor  弹出类似于资源管理器

                                               

       (2)进程查看命令
          ps  静态查看和当前shell相关的进程
          ps -A  ##所有进程
          ps -a  ##在当前环境中运行的进程,不包含环境信息
          ps -u  ##显示进程用户信息
          ps a   ##在当前环境中运行的进程,包含环境信息
          ps x   ##列出系统中所有运行包含tty输出设备
          ps -f  ##显示进程的父子关系,作一个更为完整的输出
          ps e   ##显示进程详细信息(系统资源的调用) 列出程序时,显示每个程序所使用的环境变量。

         

        ps的常用组合
              ps aux  ##显示系统中所有的进程并显示进程用户
              ps ef   ##显示进程详细信息并显示进程父子关系
              ps ax   ##显示当前系统中的所有进程,可以列出较完整的信息
       
       (3)显示进程指定信息
             ps -o xxxx    ##显示进程的指定信息
                  comm      ##进程名称
                  user        ##进程所有人
                  group       ##进程所有组
                  %cpu       ##进程cpu使用率
                  %mem     ##进程内存使用率
                  pid           ##进程id
                  nice         ##进程优先级

                                                  

       (4)进程排序
           ps ax --sort=
                +%cpu|-%cpu
                +%mem|-%mem

                                                     

      (5)stat中显示的信息
           S   ##表示:进程状态是
           l   ##内存中有锁定空间
           N   ##优先级低
           <   ##优先级高
           +   ##前台运行
           s   ##顶级进程

    3.进程优先级
       (1)进程的优先级范围    -20~19
       (2)优先级查看
          ps ax -o pid,nice,comm
       (3)指定某个优先级开启进程
          nice -n 优先级数字   进程名称
          nice -n -5 vim &   ##开启vim并且指定进程的优先级为-5

                                                  

       (4)改变进程优先级
          renice -n 优先级数字   进程pid

          renice -n -5 1806    ##改变1806进程的优先级为-5

                                                


    4.环境中进程的前后台调用(工作管理)
          jobs    ##查看被打入环境后台的进程
          ctrl+z   ##把占用终端的进程打入后台(挂起)
          fg jobsnum   ##把后台的进程调回前台
          bg jobsnum   ##把后台暂停的进程运行
          comm &       让命令直接在后台运行

                                                

    5.进程信号
       (1)常用信号的等级
          1   ##进程重新加载配置
          2   ##删除进程在内存中的数据
          3   ##删除鼠标在内存中的数据
          9   ##强行结束单个进程(不能被阻塞)
         15  ##正常关闭进程
          18  ##运行暂停的进程
          19  ##暂停某个进程(不能被阻塞)
          20  ##把进程打入后台(可以被阻塞)
          man 7 signal   ##查看信号详细信息

          kill -信号 进程pid
          killall -信号 进程名字   (删除全部有进程的名字)
          pkill -u student -信号  (查看特定的用户进程)

       

        SIGHUP  终止进程    终端线路挂断
        SIGINT  终止进程 中断进程
        SIGQUIT  建立CORE文件终止

    6.进程的动态监控
       (1)top
          1.   ##显示cpu每个核的负载
          u    ##后面输入用户名,用来查看改用户发起的所有进程
          s    ##调整刷新频率
          c    ##cpu负载排序
          m    ##内存使用量排序
          h    ##查看帮助
          q    ##退出

                                                                   

  • 相关阅读:
    JavaSE 基础 第51节 定义自己的异常
    JavaSE 基础 第50节 Java中的异常链
    JavaSE 基础 第49节 手动抛出异常
    JavaSE 基础 第48节 Java中的异常声明
    JavaSE 基础 第47节 获取异常信息
    JavaSE 基础 第46节 异常的分类
    JavaSE 基础 第45节Java异常快速入门
    JavaSE 基础 第44节 引用外部类的对象
    JavaSE 基础 第43节 静态内部类
    通用爬虫
  • 原文地址:https://www.cnblogs.com/wf-aiyouwei/p/9365195.html
Copyright © 2011-2022 走看看