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[]);

  • 相关阅读:
    几种不同风格的Toast
    [置顶] 如何访问web文件夹之外的文件
    30天自制操作系统笔记(九十)
    tomcat install on Linux
    共享内存使用的基本思路和接口
    30天自制操作系统笔记(九十)——源码
    storm单机版安装配置
    新安装XAMPP,phpMyAdmin错误:#1045
    TI-Davinci开发系列之二使用CCS5.2TI Simulator模拟环境调试DSP程序
    ffmpeg的logo, delogo滤镜参数设置
  • 原文地址:https://www.cnblogs.com/xkk956227639/p/9365364.html
Copyright © 2011-2022 走看看