进程知识点
典型的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函数
接收到信号终止
最后一个线程对取消请求做出相应