目录

        1.进程的意义

        2.查看进程

        1)windows系统可以在任务管理器查看进程

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

        3.进程号

        4.进程状态

        5.进程特点

        6.进程三态

        7.特殊进程

        8.进程相关的函数

        1)创建子进程

        2)创建子进程2

        3)获取进程的进程号

        4)获取进程的父进程号

        5)等待进程,阻塞进程

        6)等待进程结束,阻塞当前进程

        7)启动另一个进程的执行

        8)启动另一个进程的执行2

      9)正常结束进程并清理缓冲区

      10)正常结束进程但不会清理缓冲区


        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

        函数返回值:无

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐