0906进程

本文详细介绍了进程与程序的区别,阐述了进程的生命周期,包括创建、就绪、执行、阻塞和终止状态。讨论了并发执行的概念,以及CPU如何在微观和宏观层面调度进程。还提到了 fork 函数在创建新进程中的作用,以及孤儿和僵尸进程的问题。最后,重点讲解了进程间的共享特性,如全局变量和资源的读写规则。

 

进程

进程和程序:
程序是已经编好的二进制文件,在磁盘上不占用系统资源
进程,需要运行才能存在,占用系统资源,在内存中执行
并发:一个时间段里有多个进程启动和完成,但任意时刻只有一个进程只有一个进程在进行(虽然人感觉不出来),各个进程穿插运行
a,b两个文件,在磁盘里叫程序,在内存里叫进程。
从微观角度:
在CPU里每次只执行一个进程
多个进程轮流循环进行
操作系统负责调度进程执行,比如时间片       
宏观角度:
CPU频率高,每秒10亿条以上命令
肉眼识别速度偏慢
人能看到的进程是同时进行的,即并发,并非真正意义上的多个程序在运行(实际上一个CPU核心每次依然只有一个进程在进行)
64位机寻址实际也只用了2^48,资源浪费很大
映射:三个程序都需要运行,
程序的映射:各路程序的堆栈→CPU(MNU)→映射至虚拟内存
内核到内存的映射:内核通过操作系统映射到同一区域
用户空间:虚拟空间的实际使用量会金国MMU处理成相同大小的物理空间
内核空间:对CPU,每个程序都有各自的内核,程序在虚拟内存上跑

进程控制块PCB:在内核中,储存并维护进程相关信息:
内核进程控制块是task_struct结构体

进程状态模型

三态模型
就绪状态:当进程获得处理机可以执行前的状态。多个就绪态进程拍成序列
执行状态:进程获得处理机,程序正在执行
阻塞状态:因发生事件而暂停执行时的状态,即进程执行收到阻塞,故称这种状态位阻塞状态。阻塞的进程排成一个队列

 

五态模型
创建状态:申请空白PCB,填写控制和管理进程的星系,
就绪状态:分配到CPU开始运行前的状态
执行状态:处于就绪状态被调度后,进入执行状态
阻塞状态:进程暂时无法运行即受到阻塞,满足运行状态后进入就绪状态
终止状态:进程结束或出错,进入终止状态,无法再启动

fork函数:通过系统调用创建一个与旧进程完全相同的进程

头文件:<unistd.h><sys/types.h>
语法pid_t fork(void);成功返回子进程和0,失败返回-1,返回其他值和父进程
区别父子进程的标志:pid
getpid()子ID,getppid()父ID,getuid(),getgid()
在else项以外运行fork函数会让所有进程产生子进程

进程共享

父子进程之间在fork后的共同点和不同点:
全局变量,.data,.text,.栈,堆,环境变量,用户ID,宿主目录,进程工作目录,信号处理方保持一致...
进程ID fork返回值 父进程ID 进程运行时间 闹钟 未决信号集发生变化
父子进程之间遵循读时共享,写时赋值,旨在节省内存占用

回收子进程

孤儿进程和僵尸进程
查看进程 ps -aux
孤儿进程:父进程先于子进程结束,则子进程称为孤儿进程,子进程的父进程为init领养进程。
中止孤儿进程 用kill -9 pid号

 

僵尸进程:进程终止,父进程尚未回收,子进程残留资源PCB存放于内核中,变成僵尸进程
僵尸进程不能用kill命令清除,通过exit指令来退出进程

 

### 问题分析与解决方案 在配置 Nginx 使用 SSL 证书时,如果出现 `PEM_read_bio_X509_AUX() failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)` 错误,通常是由于证书文件格式不正确或路径错误导致的。以下是可能的原因及解决方法: --- #### 1. **检查证书文件路径** 确保指定的证书路径 `/usr/local/nginx/conf/7175012_api.xxxxx.com.key` 和 `/usr/local/nginx/conf/kun.xxxx.com.crt` 是正确的,并且文件确实存在于该路径下[^4]。如果文件不存在,Nginx 将无法加载证书。 --- #### 2. **验证证书文件格式** 证书文件需要以 PEM 格式存储,通常包含以下内容: - 开头为 `-----BEGIN CERTIFICATE-----` - 结尾为 `-----END CERTIFICATE-----` 如果证书文件不符合上述格式,可以使用 OpenSSL 工具将其转换为 PEM 格式。例如: ```bash openssl x509 -in your-cert.crt -out your-cert.pem -outform PEM ``` 此命令将 `.crt` 文件转换为 `.pem` 格式[^5]。 --- #### 3. **合并证书链** 某些情况下,证书文件可能只包含服务器证书,而未包含中间证书。可以通过以下方式合并证书链: ```bash cat your-cert.crt intermediate-cert.crt > fullchain.pem ``` 然后在 Nginx 配置中使用 `fullchain.pem` 文件作为 `ssl_certificate` 的值[^2]。 --- #### 4. **检查私钥文件格式** 私钥文件也需要以 PEM 格式存储,通常包含以下内容: - 开头为 `-----BEGIN PRIVATE KEY-----` 或 `-----BEGIN RSA PRIVATE KEY-----` - 结尾为 `-----END PRIVATE KEY-----` 或 `-----END RSA PRIVATE KEY-----` 如果私钥文件格式不正确,可以使用以下命令将其转换为 PEM 格式: ```bash openssl rsa -in your-key.key -out your-key.pem ``` --- #### 5. **Nginx 配置示例** 以下是正确的 Nginx 配置示例: ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/fullchain.pem; # 合并后的证书链 ssl_certificate_key /path/to/your-key.pem; # 私钥文件 location / { root /var/www/html; index index.html; } } ``` 确保 `ssl_certificate` 指向合并后的证书链文件,而 `ssl_certificate_key` 指向私钥文件[^2]。 --- #### 6. **权限问题** 确保 Nginx 进程有权限读取证书和私钥文件。可以通过以下命令检查和修改文件权限: ```bash chmod 600 /path/to/fullchain.pem chmod 600 /path/to/your-key.pem chown nginx:nginx /path/to/fullchain.pem chown nginx:nginx /path/to/your-key.pem ``` --- #### 7. **测试配置** 完成上述步骤后,重新测试 Nginx 配置是否正确: ```bash nginx -t ``` 如果没有错误,重启 Nginx 服务以应用更改: ```bash systemctl restart nginx ``` --- ### 总结 通过检查证书路径、验证文件格式、合并证书链、修正私钥格式以及调整文件权限,可以有效解决 `PEM_read_bio_X509_AUX() failed` 错误[^1]。如果问题仍然存在,请仔细检查日志输出以获取更多线索。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值