进程知识点

典型的linux结构

《进程知识点》 linux结构图

shell命令执行过程

《进程知识点》 shell执行

三进程概念

程序的一个执行实例

正在执行的程序

能分配处理器并由处理器执行的实体

进程描述

每一个进程都有一个进程控制块(PCB)linux下为task_struct结构体

该结构体在include/linux/sched.h文件中

进程标识符

PID

PPID

进程映像(从高地址到低地址)

内核部分

命令行参数以及环境变量

共享区

(以下部分由exec替换并初始化)
未初始化数据
已初始化数据

代码区

环境变量的获取

extern char **environ;

相关函数

getenv

setenv

unsetenv

进程状态

running运行状态:正在运行或者在运行队列中

sleeping睡眠状态:在等待事件完成

disk sleep磁盘休眠状态:会等待io完成,不可中断

Zombies僵死状态:父进程未调用wait等待,而子进程退出.

stopped,暂停状态,通过single T信号产生

X(dead),死亡状态,系统清除该进程信息

t (tracing stop):用于debug调试跟踪

一份专业描述

PROCESS STATE CODES

R  running or runnable (on run queue)

D  uninterruptible sleep (usually IO)

S  interruptible sleep (waiting for an event to complete)

Z  defunct/zombie, terminated but not reaped by its parent

T  stopped, either by a job control signal or because it is being traced

[…]

《进程知识点》 进程基本状态转换

僵尸进程:如果一个进程的父进程一直不掉用wait或者waitpid,子进程退出,没有人接收其状态,那么他就会作为僵尸进程存在,直到父进程退出,然后交给init进程管理

孤儿进程:如果父进程退出,而其还有一个或者多个子进程在运行,那么这些子进程就会变成孤儿进程.由init接管

进程优先级

lang@liang:~$ ps -l

F S  UID  PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD

0 S  1000  4450  2121  0  80  0 –  2236 wait  pts/19  00:00:00 bash

4 R  1000  5126  4450  0  80  0 –  2304 –      pts/19  00:00:00 ps

注:这里的PRI就是进程优先级

而NI则对应nice值,用于调节优先级

相关命令

nice   调节程序执行时优先级
nice -n -5 /usr/local/mysql/bin/mysqld_safe &

renice    修改正在运行程序的优先级
renice -5 -p 5200

进程创建

fork()

fork成功,子进程得到父进程地址空间的堆,栈,数据区域的拷贝,而文本段则是父子进程共享的

进程终止

exit
从主函数返回
_exit
return
最后一个线程调用pthread_exit
调用abort函数
接收到信号终止
最后一个线程对取消请求做出相应

点赞