zoukankan      html  css  js  c++  java
  • 进程管理

    一、基本概念

      1、进程与程序

        程序:是存储在磁盘上的文件,他是包含要执行的机器指令和数据的静态实体

        进程:是一个正在运行的程序,一个程序可能包含多个进程,进程在操作系统中是一个执行特殊任务的单位

      2、进程的分类

        交互进程、批处理进程、守护进程

      3、查看进程

        ps:显示当前用户当前终端所控制的进程

        -a:显示所有用户进程

        -x:包括无终端控制的进程

        -u:显示详细信息

        -w:以更宽的宽度来显示

      4、进程信息表 ps -aux | grep "name" 过滤

        USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

      5、进程状态

        O:就绪态,等待被调用

        R:运行态,Linux下没有没有就绪态

        S:可被唤醒的睡眠态

        D:不可被唤醒的睡眠态

        T:暂停态,收到了SIGSTOP信号,当收到SIGCONT信号则继续运行

        X:死亡态

        Z:僵尸态

        <:最高优先级

        N:低优先级

        L:多线程进程

        S:有子进程的进程

        +:后台进程组

      6、父子进程

        如果进程B是由进程A开启的,那么我们就把进程A叫进程B的父进程,进程B叫做进程A的子进程

        当子进程结束后会向父进程发送,SIGCHLD,父进程收到信号后再去回收子进程

        当父进程先结束,子进程就会变成孤儿进程,会被孤儿院(init)收养

        如果子进程已经结束,但父进程没有及时回收,子进程就变成了僵尸进程

    二、 getxxpid

      pid_t getpid(void);
      功能:获取进程id

      pid_t getppid(void);
      功能:获取父进程id

      uid_t getuid(void);
      功能:获取实际使用者的用户id

      uid_t geteuid(void);
      功能:获取程序的拥有者的用户id

      gid_t getgid(void);
      功能:获取实际使用者的组id

      gid_t getegid(void);
      功能:获取程序的拥有者的组id

    三、fork

      pid_t fork(void);

      功能:创建子进程

      失败返回-1,如果成功父进程会返回子进程的id,子进程返回0,通过fork创建出的子进程,就是父进程的副本,它会把父进程的堆、栈、全局段、静态数据段、IO流的缓冲区都拷贝一份,父子进程共享代码段

     四、vfork

      pid_t vfork(void);

      功能:创建子进程

      vfork不能单独创建子进程,需要与exec函数簇,配合才能完成子进程的创建,他与fork不同,他不会复制父进程的堆、栈、数据、全局段等,也不会共享代码段,而是通过excl函数调用一个程序直接启动,全面提高了创建进程的效率

    五、exec函数簇

      int execl(const char *path, const char *arg, ...);

      path:可执行文件的路径

      arg:给可执行文件的参数,类似于命令行参数,可以是无限个,必须以NULL结尾,第一个必须是可执行文件名
      //execl("","a.out",NULL);

      int execlp(const char *file, const char *arg, ...);

      file:可执行文件的文件名,会从PATH环境变量指定的位置去找可执行文件

      int execle(const char *path, const char *arg,..., char * const envp[]);  

      envp:修改后的环境变量表

      int execv(const char *path, char *const argv[]);  

      int execvp(const char *file, char *const argv[]);

      int execvpe(const char *file, char *const argv[],char *const envp[]);

  • 相关阅读:
    Serialize and Deserialize Binary Tree
    sliding window substring problem汇总贴
    10. Regular Expression Matching
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第七章 链接
    程序员如何写一份合格的简历?(附简历模版)
    9个提高代码运行效率的小技巧你知道几个?
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第六章 存储器层次结构
    24张图7000字详解计算机中的高速缓存
    《深入理解计算机系统》(CSAPP)实验四 —— Attack Lab
    《深入理解计算机系统》(CSAPP)读书笔记 —— 第五章 优化程序性能
  • 原文地址:https://www.cnblogs.com/xkk956227639/p/9365364.html
Copyright © 2011-2022 走看看