美文网首页
linux-07-进程管理1

linux-07-进程管理1

作者: vera姐姐 | 来源:发表于2016-05-12 20:22 被阅读82次

    进程管理:

    Linux/Unix系统查看进程的命令ps,在终端敲ps只会显示与终端有关的进程。

    ps -ef

    ps -aux  Linux的命令选项,Unix不直接支持(通过新增了一个ps支持

    whereis 可以查看文件/命令在哪里

    whereis ps就可以看到两个ps都在哪里

    分页看结果用 | more,空格/回车 翻行翻页,q 退出

    一般退出都是按 q 或 esc键。

    ps -ef  |more

    ps -aux |more

    kill -9 进程PID 可以杀死进程

    进程的启动不是同时完成的,而是有先后次序,如果进程a启动了进程b,a叫做b的父进程,b叫做a的子进程。父进程可以启动多个子进程,子进程只能有一个直接的父进程。

    linux系统的进程启动次序:

    1.系统启动进程0,进程0 启动进程1(init进程)和进程2,(有些系统值启动进程1)然后进程0 就不再做其他事情了。

    2.进程1和进程2负责启动其他的进程(直接和间接)。

    进程通常情况下都处于休眠状态,进程的常见状态:

    S 休眠状态 最常见的状态

    R 运行状态或可运行状态

    Z 僵尸进程,就是已经结束但是资源没有回收的进程

    s 有子进程

    < 优先级高的进程

    N 优先级低的进程

    系统用进程ID管理进程,每个进程的进程ID(PID)都是不能重复的,唯一代表一个进程。PID是非负整数。系统和用户有进程数量的限制。进程结束后,pid可以回收,回收的pid可以重复使用,但必须延迟重用(过一段时间才能重用)。

    进程的PID可以用函数getpid()获取,函数getppid()可以获取父进程的PID。getuid()可以获取当前用户的ID。

    如何创建子进程:

    1 fork() 通过复制父进程自身创建子进程。

    2 fork() + execl() 创建全新的子进程。

    fork()是非常复杂的简单函数。

    pid_t fork(void)

    返回进程PID,这个函数基本都会成功,出错的可能只有系统或用户的进程已经满了。

    fork()如何复制父进程的?

    1.子进程会复制父进程的内存区域,除了代码区,代码区父子进程共享(内存地址也会复制,但物理内存是不同的).

    2.父进程的输入/输出缓冲区的内容,子进程会复制。

    3.如果父进程有文件描述符,子进程会复制文件描述符,但不复制文件表(同一个文件表,同一个偏移量)。

    4.子进程会完全复制 父进程的信号处理方式

    5.fork()之前只有一个父进程,fork()之后有两个进程,一父一子;因此:fork()之前的代码将会执行一次,而fork()之后的代码会执行两次,父进程,子进程分别执行一次(子进程从fork()开始执行代码的)。

    6.fork()函数能创建子进程,同时会返回两次,父进程返回子进程PID,而子进程会返回0.可以通过返回值的不同让父进程和子进程分别执行不同的代码

    7.fork()创建子进程后,父子进程同时运行,但谁先运行,谁先结束,都不确定

    8.fork()创建子进程后,父子进程同时运行,如果子进程先结束,会给父进程发信号,让父进程回收自己的资源。如果父进程先结束,子进程变成孤儿进程,会让进程1(init)成为新的父进程。init进程也叫孤儿院。

    相关文章

      网友评论

          本文标题:linux-07-进程管理1

          本文链接:https://www.haomeiwen.com/subject/mjuprttx.html