嵌入式基础笔记:进程的学习(一)
学习内容:
-
进程的概念
程序:磁盘上的可执行文件
|加载
v
进程:内存中的指令和数据。
| … ^
v … |访问
CPU— + -
进程的分类
交互式进程:由Shell启动,借助标准I/O与用户交互。
批处理进程:在无需人工干预条件下,自动运行批量处理。
守护(精灵)进程:后台服务。 -
进程快照
(1)ps -显示当前用户拥有控制终端的进程信息
(2)ps axuw - BSD风格选项 a:所有用户 x:包括控制终端和无控制终端进程 u:详细信息 w:更大列宽
(3)ps -efFl -SVR4风格选项 e:所有用户的所有进程 f:完整格式 F:更完整格式 l:长格式
(4)USER/UID:进程的实际用户ID (5) PID:进程标识 (6) %CPU/C:CPU使用率
(7)%MEM:内存使用率 (8)VSZ:(virtual size)虚拟内存大小
(9)RSS:半导体物理内存大小 (10)TTY:终端次设备号 ttyn -物理终端 pts/n-虚拟终端 ?-无控制终端
(11)START:启动时间 (12)TIME:运行时间 (13)COMMAND/CMD:启动命令
(14) F:进程标志 1-产生子进程 4-拥有ROOT特权 (15)PPID:父进程PID
(16)NI-进程nice值 (17)PRI-进程优先级=80+nice,(小)大 -
STAT/S:进程状态
(1)O-就绪,等待被调度 (2)R-运行 (3)S-可唤醒睡眠,获取资源或受到信号,被唤醒。
(4)D-不可唤醒睡眠,仅被wake_up系统调用唤醒(装睡的人) (5)T-暂停,SIGSTOP暂停,SIGCONT运行
(6)W-等待内存分页 (7)X-终止且被回收,不可见 (8)Z-僵尸,已退出,未被回收
(9)<-高优先级 (10)N-低优先级 (11)s-会话首进程 (12)l-多进程化
(13)±前台进程组
5.浅学俩linux命令:ps和kill
常用指令: ps -A 显示所有进程信息
ps -u root 显示指定用户信息
ps -ef 显示所有进程信息,连同命令行
ps -ef|grep ssh ps 与grep 常用组合用法,查找特定进程
ps -l 将目前属于您自己这次登入的 PID 与相关信息列示出来
ps aux 列出目前所有的正在内存当中的程序
kill: kill -l 所有信号的列表
kill [信号或选项] PID(s) 命令格式(可以查看信号作用)
kill SIGKILL PID或kill -9 PID 杀掉一个进程
6.父子孤尸
父进程创建子进程,子进程继承父进程。
父进程可以创多子进程,子进程仅有一个父进程。
进程树(PID=0)
init(PID=1)
xineted
in.telnetd <- 远程登录
login <-用户名和密码
bash <-Shell命令:ls
ls ->显示目录条目清单
父子:父进程在创建子进程后依然存在,可以和子进程交互。
新旧:旧进程在创建新进程,旧进程会消失。
孤儿进程:父进程创建子进程后,子进程和父进程同时运行,父进程先于子进程终止,子进程成为孤儿进程,同时被init进程 收养,init进程又叫孤儿院进程。
僵尸进程:子进程先于父进程终止,子进程成为僵尸进程,不再活动,但是,也会占用系统资源,直到父进程或init进程回收为止
7.进程的各种ID
系统内核会为每个进程维护一个进程表项,ID包括:
进程ID:系统为每个进程分配ID,分配到不能在增加了,再回头找已被释放的进程ID。
父进程ID:父进程的PID,在创建子进程过程中被初始化到子进程的进程表项中。
实际用户ID:启动该用户进程的用户ID。
实际组ID:启动该用户进程的用户组ID。
有效用户ID:一般取自实际用户ID,当该进程可执行文件设置用户ID,就取自可执行文件用户ID。
有效组ID:一般取自实际用户组ID,当该进程可执行文件设置用户组ID,就取自可执行文件用户组ID。
一个进程的能力和权限,由有效用户ID和有效组ID。
C语言函数调用
#include<unistd.h> pid_t getpid(void);//返回调用进程的PID pid_t getppid(void);//返回调用父进程的PID pid_t getuid(void);//返回调用进程的实际用户ID pid_t getgid(void);//返回调用进程的实际用户组ID pid_t geteuid(void);//返回调用进程的有效用户ID pid_t getegid(void);//返回调用进程的有效用户组ID
8.创建子进程
产生进程分支(fork)
pid_t fork(void)//成功 父进程返回子进程PID,子进程返回0,失败返回-1.