进程管理

一、基本概念

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

 

posted @ 2018-07-25 12:52  寄生!  阅读(177)  评论(0编辑  收藏  举报