【笔记整理】unix/linux的进程管理(一)

Unix/Linux 下的进程管理


1. 进程与程序
~~~~~~~~~~~~~


1) 进程就是运行中的程序。一个运行着的程序,
   可能有多个进程。进程在操作系统中执行特定的任务。


2) 程序是存储在磁盘上,
   包含可执行机器指令和数据的静态实体。
   进程或者任务是处于活动状态的计算机程序。


2. 进程的分类
~~~~~~~~~~~~~


1) 进程一般分为交互进程、批处理进程和守护进程三类。


2) 守护进程总是活跃的,一般是后台运行。
   守护进程一般是由系统在开机时通过脚本自动激活启动,
   或者由超级用户root来启动。


3. 查看进程
~~~~~~~~~~~


1) 简单形式


# ps


以简略方式显示当前用户有控制终端的进程信息。


2) BSD风格常用选项


# ps -axu


a - 所有用户有控制终端的进程
x - 包括无控制终端的进程
u - 以详尽方式显示
w - 以更大列宽显示


3) SVR4风格常用选项


# ps -efl


-e或-A            - 所有用户的进程
-a                - 当前终端的进程
-u 用户名或用户ID - 特定用户的进程
-g 组名或组ID     - 特定组的进程
-f                - 按完整格式显示
-F                - 按更完整格式显示
-l                - 按长格式显示


4) 进程信息列表
技术分享

USER/UID: 进程的用户ID。


PID: 进程ID。


%CPU/C: CPU使用率。


%MEM: 内存使用率。


VSZ: 占用虚拟内存大小(KB)。


RSS: 占用物理内存大小(KB)。


TTY: 终端次设备号,“?”表示无控制终端,如后台进程。


STAT/S: 进程状态。可取如下值:


O - 就绪。等待被调度。
R - 运行。Linux下没有O状态,就绪状态也用R表示。
S - 可唤醒睡眠。系统中断,获得资源,收到信号,
    都可被唤醒,转入运行状态。
D - 不可唤醒睡眠。只能被wake_up系统调用唤醒。
T - 暂停。收到SIGSTOP信号转入暂停状态,
    收到SIGCONT信号转入运行状态。
W - 等待内存分页(2.6内核以后被废弃)。
X - 死亡。不可见。
Z - 僵尸。已停止运行,但其父进程尚未获取其状态。
< - 高优先级。
N - 低优先级。
L - 有被锁到内存中的分页。实时进程和定制IO。
s - 会话首进程。
l - 多线程化的进程。
+ - 在前台进程组中。


START/STIME: 进程开始时间。


TIME: 进程运行时间。


COMMAND/CMD: 进程指令。


F: 进程标志。可由下列值取和:


1 - 通过fork产生但是没有exec。
4 - 拥有超级用户特权。


PPID: 父进程ID。


NI: 进程nice值,-20到19,可通过系统调用或命令修改。


PRI: 进程优先级。


静态优先级 = 80 + nice,60到99,值越小优先级越高。
内核在静态优先级的基础上,
根据进程的交互性计算得到实际(动态)优先级,
以体现对IO消耗型进程的奖励,
和对处理器消耗型进程的惩罚。


ADDR: 内核进程的内存地址。普通进程显示“-”。


SZ: 占用虚拟内存页数。


WCHAN: 进程正在等待的内核函数或事件。


PSR: 进程当前被指派给哪个处理器运行。


4. 父进程、子进程、孤儿进程和僵尸进程
-------------------------------------


内核进程(0)
  init(1)
    xinetd
      in.telnetd <- 用户登录
        login
          bash
            vi


1) 父进程启动子进程后,
   子进程在操作系统的调度下与其父进程同时运行。


2) 子进程先于父进程结束,
   子进程向父进程发送SIGCHLD(17)信号,
   父进程回收子进程的相关资源。


3) 父进程先于子进程结束,子进程成为孤儿进程,
   同时被init进程收养,即成为init进程的子进程。


4) 子进程先于父进程结束,
   但父进程没有回收子进程的相关资源,
   该子进程即成为僵尸进程。


5. 进程标识符(进程ID)
~~~~~~~~~~~~~~~~~~~~~

PID - 进程号,是进程在操作系统中的唯一标识,进程号的分配采用延迟重用的策略进行的,在每一个时刻都可以保证进程号唯一。

二、getxxxid
------------


getpid - 获取进程ID
getppid - 获取父进程ID
getuid - 获取实际用户ID
geteuid - 获取有效用户ID
getgid - 获取实际组ID
getegid - 获取有效组ID


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。