zoukankan      html  css  js  c++  java
  • linux进程

    E: 进程------->进程控制块PCB   结构体

        进程控制块中,存放的是指针数组------>是已经打开的文件的结构体的指针

        文件描述符实际上就是指针数组的索引

    e1: ps命令(进程快照):查看进程状态

        ps aux;ps -ef

                    

    e2: 进程process概念:

         进程是一个程序的一次执行过程,是一个程序的执行实例,是一个抽象实体,当系统执行某一个程序,分配和释放各种资源(内存空间,磁盘)

         特点:进程是一个独立可调度的任务

         调度:1.找到下一个要调度的进程(优先级,时间片轮转)   2.进程交换/上下文切换               

    e3: 进程的状态:

         运行态:已经在cpu上运行或准备就绪

         可中断的等待态          跟资源访问有关

         不可中断的等待态(可中断睡眠状态/不可中断睡眠状态)

         停止态:中止,运行中间停止

         僵尸态

    e4: 进程与程序的区别:

         1.进程是一个动态的概念,是程序执行的过程

         2.程序是静态的,保存在磁盘上的指令的有序集合

    e5: 进程的组织结构:

         程序:正文段(代码段)+ 数据段

         进程:正文段(代码段)+ 数据段 + 进程控制块PCB(process control block)

    e6: 在进程运行过程中,还包括存储临时数据的进程堆栈,CPU的所有寄存器值

    e7: 父进程和子进程:进程是由其他进程生成的,生成进程的进程则叫做父进程,被生成的进程叫做子进程

         进程id号    PID,一个id号对应一个进程,一个进程对应一个id号,是唯一的

         父进程id号    PPID

         孤儿进程:父进程运行完退出或异常退出,子进程成为孤儿进程,孤儿进程由init进程收养

    e8: 进程的类型:

         守护进程/精灵进程daemon:在后台运行,提供服务的进程(大多数的服务都是由守护进程实现的),一般在linux系统启动时开始执行,系统关闭时才结束,生存期较长的进程

     终端:系统与用户进行交流的界面

     从一个终端开始运行的进程都会依附于这个终端,这个终端称为这些进程的控制终端,当控制终端关闭时,相应的进程也会被自动关闭

     会话session:一个或多个进程组所组成的组

     进程组:一个或多个进程组成的组

         交互进程:由shell控制和运行的交互进程既可以在前台运行,也可以在后台运行

         批处理进程:被提交到一个队列中顺序执行

    e9: 当前进程(运行原来的程序)

        |   |------------------------------------------------------------------>|

        | fork():创建一个新的进程,操作/处理------->exit():结束一个进程------->wait(&s)等待/阻塞,s&0377的值是n

        |

    -->进程(exec()运行新的程序)

    e10: fork()与vfork():

           fork:完整的拷贝/复制父进程的内存空间,因此执行速度比较慢        

       vfork:提高效率

            1.会创建新进程,但是它不产生父进程的副本,不进行复制,子进程在父进程的空间当中运行

            2.子进程先运行,子进程会阻塞父进程,它必须等子进程结束后,父进程才能运行,否则,父进程会处于不可中断等待状态

           注意:若子进程依赖父进程的操作,父进程又必须阻塞到子进程结束,此时就会造成“死锁(deadlock)”

           vfork 的子进程与父进程的变量是共享的,进程空间是共享的

    e11:  _exit()和exit():

           _exit()函数直接使进程停止运行,清除其使用的内存空间,并撤销了他在内核空间的数据结构

           exit()函数则是在这些基础上做了一个包装,在执行退出之前/调用_exit()之前,检查文件的打开情况,把文件缓冲区中的内容进行刷新fflush,即“清理IO缓冲”

    e12: pid_t waitpid(pid_t pid, int *status, int options);

          @pid:

          >0-----> 只等待进程的id = pid的子进程

        =0-----> 等待组id = 调用waitpid的进程的组id的任意一个子进程

        =-1----> 等待任何一个子进程退出,相当与wait()函数

        <-1----> 等待其组id = pid的绝对值的任意一个子进程

         @options:

          0:阻塞父进程,等待子进程退出,跟wait()函数作用一样

         WNOHANG:如果pid指定的子进程不是退出/不是立即可用,那么waitpid不会等待/阻塞,此时返回值=0

        wait(&status) 等价于   waitpid(-1, &status, 0);

                            |

            v

    ----------fork()----------

    |                        |

    |                   父进程waitpid(WNOHANG)<-----

       子进程                |                      |

          打印时间          返回值?-------ret==0------

       3次,1s1次              |

    |                     ret==pid

       exit                   打印status

                                 |

                退出

    e13: 进程的操作/编程:

         -------> fork -----> wait(&status) <---

               |                           |

       -----> exec -------------> exit(n)

                                  启动例程

  • 相关阅读:
    LayoutInflater
    android 顶部的通知栏
    ..搞Android了
    数据分组取最大值行
    decode、sign、case在统计中的用法:
    Row generator
    存储过程包实例分享
    Bind variables in 'in' condition(在in中动态的绑定参数(参数个数可变))
    WM_CONCAT字符超过4000的处理办法
    oracle script
  • 原文地址:https://www.cnblogs.com/jfyl1573/p/6249811.html
Copyright © 2011-2022 走看看