进程入门基础
本文介绍了进程的基本概念及相关操作。进程是程序运行的基本单元,包含线程,具有独立性、动态性、并发性和异步性等特点。进程状态包括运行、睡眠、停止等多种状态,并通过三态模型(等待态-就绪态-执行态)描述其生命周期。特殊进程如父/子进程、孤儿进程和僵尸进程等具有特定行为。文章还详细说明了进程查看方法(Windows任务管理器或Linux的ps命令)和进程号分配规则,并列举了进程操作的关键函数,包括for
目录
1.进程的意义
进程是程序运行的最基本单元,是一个二进制程序
线程是程序运行的最小单元,进程包含线程
2.查看进程
1)windows系统可以在任务管理器查看进程

2)Linux 可以用指令查看进程
ps -ef

3.进程号
1)系统管理进程的唯一标识,32 位内核限制进程号小于等于 32767,达到时重置进程号计数器,64 位进程号达 2 的 22 次方。
2)1-300的进程号被系统进程和守护进程占用,300以后的进程号才能使用
4.进程状态
在终端用指令来查看进程状态
ps -aux

(1)S:睡眠
(2)R:运行 -- 执行或即将运行状态
(3)D:不可中断的睡眠(等待) 通常等待输入或输出的完成
(4)T:停止 通常是被 shell 或调试器控制停止
(5)N:低优先级任务
(6)Z: 僵尸进程
(7)X: 死进程
(8)s: 进程是会话期首进程
(9)+:后台进程 和用户交互的任务
(10)l: 进程是多线程的
(11)<:高优先级任务
5.进程特点
1)独立性:每个进程之间相互独立,具有独立的空间 ,系统在每个进程生成后会分配一个虚拟空间。
2)动态性:进程的实质是程序的一次执行过程,进程时动态产生,动态消亡的
3)并发性:任何线程都可以和其他进程一起并发执行
4)异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按 各自独立的、不可
预知的速度向前推进
6.进程三态
等待态->就绪态->执行态

7.特殊进程
(1)父进程 -- 创建/启动一个进程的进程称之为该进程的父进程
(2)子进程 -- 被创建的进程,称为子进程
(3)0 号进程 -- 操作系统的引导程序
(4)祖先进程 -- 操作系统启动的第一个程序,1 号进程
(5)孤儿进程 -- 父进程先于子进程死亡,孤儿进程会被祖先进程收养。
(6)僵尸进程 -- 一种非常特殊的进程,它几乎已经放弃了所有内存空间,没有任何可执行代
码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进 程的退出状态等信息供其他进程
收集,除此之外,僵尸进程不再占有任何内存空间
8.进程相关的函数
1)创建子进程
函数名:fork -- 子进程会复制父进程的资源,独立运行。并且与父进程一起抢占 CPU 资源 --
父子进程抢占资源异步执行
函数头文件:#include <sys/types.h> #include <unistd.h>
函数原型:pid_t fork(void);
函数参数:无
函数返回值:pid_t == 0 -- 子进程 pid > 0 父进程 pid < 0 失败
2)创建子进程2
函数名:vfork -- 子进程在被创建之前会复制父进程资源,但是也会共享资源给父进 程。系统
会阻塞父进程,直到子进程执行结束,父进程才执行。
函数头文件:#include <sys/types.h> #include <unistd.h>
函数原型:pid_t vfork(void);
函数参数:无
函数返回值:pid_t == 0 -- 子进程 pid > 0 父进程 pid < 0 失败
3)获取进程的进程号
函数名:getpid
函数头文件:#include <sys/types.h> #include <unistd.h>
函数原型:pid_t getpid(void);
函数参数:无
函数返回值:进程号 -- pid
4)获取进程的父进程号
函数名:getppid
函数头文件:#include <sys/types.h> #include <unistd.h>
函数原型:pid_t getppid(void);
函数参数:无
函数返回值:父进程号 -- pid
5)等待进程,阻塞进程
函数名:wait
函数头文件:#include <sys/types.h> #include <sys/wait.h>
函数原型:pid_t wait(int *wstatus);
函数参数:wstatus -- 等待状态,一般写 NULL
函数返回值:成功 -- 返回子进程的进程号 -1 失败
6)等待进程结束,阻塞当前进程
函数名:waitpid
函数头文件:#include <sys/types.h> #include <sys/wait.h>
函数原型:pid_t waitpid(pid_t pid, int *wstatus, int options);
函数参数:pid -- 等待的进程号 wstatus -- 等待状态,一般写 NULL options -- 等待方式 0 --
死等,等同于 wait WNOHANG -- 不会死等,若子进程不立即执行,则不阻塞。
函数返回值:成功 -- 返回子进程的进程号 -1 失败
7)启动另一个进程的执行
函数名:execl
函数头文件:#include <unistd.h>
函数原型:int execl(const char *pathname, const char *arg, ... /* (char *) NULL */)
函数参数:pathname -- 启动进程的文件路径及文件名 char *arg -- 启动进程程序的指令 ... ---
可变参数, -- 启动程序所需要的参数 ,以 NULL 结尾。
函数返回值:-1 失败
8)启动另一个进程的执行2
函数名:execlp
函数头文件:#include <unistd.h>
函数原型:int execlp(const char *file, const char *arg, ... /* (char *) NULL */);
函数参数:file-- 要执行的文件名 -- 默认会从系统的环境变量中查找文件 路径。 char *arg -启
动进程程序的指令 ... --- 可变参数, -- 启动程序所需要的参数 ,以 NULL 结尾。
函数返回值:-1 失败
9)正常结束进程并清理缓冲区
函数名:exit
函数头文件:#include <stdlib.h>
函数原型:void exit(int status);
函数参数:status -- 一般写 0
函数返回值:无
10)正常结束进程但不会清理缓冲区
函数名:_exit
函数头文件:#include <stdlib.h>
函数原型:void _exit(int status);
函数参数:status -- 一般写 0
函数返回值:无
更多推荐



所有评论(0)