Linux---进程概念
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
1. 什么是进程
其实我们启动一个软件本质就是启动了一个进程
在Linux中运行一条命令./xxx运行的时候其实就是在系统层面创建了一个进程
Linux是可以同时加载多个程序的Linux是可能同时存在大量的进程在系统中的(OS,内存) 那么Linux要不要管理进程呢答案是必须的 如何管理先描述再组织。
2. 描述进程---PCB
- 进程信息被放在一个叫做进程控制块的数据结构中可以理解为进程属性的集合。(Linux下一切皆文件文件 = 属性 + 内容)
- 我们将进程控制块称之为PCBprocess control blockLinux操作系统下的PCB是: task_struct
task_struct---PCB的一种
- 在Linux中描述进程的结构体叫做task_struct。
- task_struct是Linux内核的一种数据结构它会被装载到RAM(内存)里并且包含着进程的信息
task_ struct内容分类
- 标示符(id): 描述本进程的唯一标示符用来区别其他进程。
- 状态: 任务状态退出代码退出信号等。
- 优先级: 相对于其他进程的优先级。
- 程序计数器: 程序中即将被执行的下一条指令的地址。
- 内存指针: 包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针
- 上下文数据: 进程执行时处理器的寄存器中的数据。
- I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
- 记账信息: 可能包括处理器时间总和使用的时钟数总和时间限制记账号等。
- 其他信息
3. 组织进程
4. 查看进程
ls /proc //以文件方式查看进程
大多数进程信息同样可以使用top和ps这些用户级工具来获取
top : 查看所有进程信息类似Windows下任务管理器
但是我们更推荐用 ps 查看进程信息
通过系统调用获取进程标示符
- 进程idPID
- 父进程idPPID
代码示例
运行
通过系统调用创建进程---fork初识
fork 功能创建一个子进程 fork 特点 1. 创建失败返回-1创建成功给父进程返回子进程id给子进程返回0. 2. fork后会从原来一个进程分流分两个进程(父进程和子进程),fork后两进程共享后面代码。
因为fork后两进程代码共享所以父进程子进程都会打印第二个printf语句只是id不同罢了。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int ret = fork();
if(ret < 0)//即-1
{
printf("创建进程失败\n");
perror("fork");
return 1;
}
else if(ret == 0)//子进程
{
printf("I am child : %d!, ret: %d\n", getpid(), ret);
}
else//父进程
{
printf("I am father : %d!, ret: %d\n", getpid(), ret);
}
sleep(1);
return 0;
}
tip父子进程被创建出来哪一个进程先运行呢
不一定谁先运行这个是由操作系统的调度器决定的。