今天开始一个比较常用的模块,就是并发编程,可以极大的提高我们程序的运行效率,这部分内容非常重要。那么,让我们开始吧。
🧑🏻作者简介:一个学嵌入式的年轻人
✨联系方式:2201891280(QQ)
📔源码地址:https://gitee.com/xingleigao/study_qianrushi
⏳全文大约阅读时间: 60min
文章目录
进程的基本介绍
进程控制块
进程类型
进程状态
进程的控制命令
ps -elf
top
proc
改变用户优先级
控制命令
进程的创建和结束
进程创建 – fork
进程结束 – exit
进程的回收
进程回收 – wait
进程回收 – waitpid
DXEC函数族
进程 – execl / execlp
进程 – execv / execvp
system
守护进程
守护进程创建
写在最后
进程的基本介绍
打开资源管理器我们可以看到很多进程,所谓进程,就是运行中的程序。
程序
存放在磁盘上的指令和数据的有序集合(文件)
静态的
进程
执行一个程序所分配的资源的总称
进程是程序的一次执行过程
动态的,包括创建、调度、执行和消亡
进程控制块
进程标识PID
进程用户
进程状态、优先级
文件描述符表
进程类型
交互进程:在shell下启动。以在前台运行,也可以在后台运行
批处理进程:和在终端无关,被提交到一个作业队列中以便顺序执行
守护进程:和终端无关,一直在后台运行
进程状态
运行态:进程正在运行
就绪态:准备运行、等待cpu
等待态:进程在等待一个事件的发生或某种系统资源
可中断
不可中断
停止态:进程被中止,收到信号后可继续运行
死亡态:已终止的进程,但pcb没有被释放(僵尸态)
可以使用ps查看系统进程信息:
进程的控制命令
ps -elf
S:状态
UID:创建用户
PID:程序id
PPID:父进程id
NI:优先级
top
和ps看到的信息差不多。但是是动态显示的。
proc
本来一切皆文件,所以可以看目录里的文件开看。
改变用户优先级
优先级的范围是-20~19,其中-20是对高
nice 按用户指定的优先级运行进程
nice -n 19 ./test
renice 改变正在运行进程的优先级
renice 10 <PID>
控制命令
jobs 查看后台进程
bg 将挂起的进程在后台运行
fg 把后台运行的进程放到前台运行
进程的创建和结束
进程创建 – fork
#include <unistd.h> pid_t fork(void);
创建新的进程,失败时返回-1
成功时父进程返回子进程的进程号,子进程返回0
通过fork的返回值区分父进程和子进程
#include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(){ pid_t pid; pid = fork(); if(pid < 0){ perror("fork"); exit(-1); }else if(pid > 0){ printf("this is parent process\n"); }else if(pid == 0){ printf("this is child process\n"); } return 0; }
父子进程
子进程继承了父进程的内容
父子进程有独立的地址空间,互不影响
若父进程先结束
子进程成为孤儿进程,被init进程收养
子进程变成后台进程
若子进程先结束
父进程如果没有及时回收,子进程变成僵尸进程
进程结束 – exit
exit / _exit
exit刷新缓冲区
_exit不清空缓冲区。