基本概念:>>
一.描述进程: 'PCB -- {描述进程}'
Linux 下这个结构的名字叫做 task_struct
1.什么是进程?
:进程就是运行起来的一个程序
,站在操作系统的角度下进程就是一个 PCB
,在 Linux 系统下用 结构体 task_struct 描述进程
****Linux 下关于进程的命令{
:ls /proc/ '包含所有进程信息' 以进程 id 命名
,ps aux '查看所有进程'
,ps -ef | grep exe '查看可执行程序 exe 的进程'
,head -n 50 | tail -n 1
,top 'Linux 下查看资源管理器 动态刷新'
ps -l '查看进程优先级'{
:PRI '优先级'
,NI 'nice 值' 调整优先级的参数 'PRI 与 nice 相加'
,UID 执行者的身份
,PRI 值越小优先级更高 PRI(new) = PRI(old) + nice
};
nice -n 5 ./main
renice -n 10 -p 666 '设置优先级'
pe -efl
top '修改已存在进程的 nice 值'
echo $PATH '查看系统环境变量'
export '声明变量'
export MYVALUE = 1;
env
unset MYVALUE '干掉环境变量' 删除
查看环境变量{
:env
,set
};
};
****Linux 下关于进程的函数{
#include '系统调用'
:getpid() '获取进程 ID ' 返回类型 'pid_t'
,fork() '创建进程'
*##*fork() 的返回值 '做子进程与父进程的分流'{
pid_t pid = fork();
if(pid < 0){
return -1;
}
else if(pid == 0){
'子进程'
}
else{
'父进程'
}
,pid '子进程 ID' ppid '父进程 id'
操作系统以父进程为模板创建子进程
,父子进程代码段相同
,但是书据各自独有
fork 的返回值起到分流的作用
通过 fork 的返回值来进行判断哪个是父进程
,哪个是子进程
对于父进程来说返回值是子进程 id
对于子进程返回的是 0 值
出错没有子进程 返回值 -1
'复制的是 PCB' 内存指针
}
};
二.进程状态:{
R(running)/* 0 */
S(sleeping)/* 1 */
D(disk sleep)/* 2 */不可中断睡眠状态,唤醒方式特殊
T(stopped)/* 4 */睡眠状态,停止状态
Z(zombie)/* 32 */僵尸状态
};'进程状态略看'
僵尸进程:
产生原因:
0.子进程先于父进程退出
1.子进程退出为了保存自己退出的原因
,因此这个退出后资源不会被完全释放
,等待父进程来获取推出状态,然后释放紫子进程所有资源
2.假如父进程没有关心子进程的退出
,那么这个时候这个退出的子进程将成为一个僵尸进程
,占据着系统资源而不释放
危害:资源泄露,正常进程可能无法创建
孤儿进程 '后台运行'
三.进程优先级.
交互式进程:
****如何将一个进程绑定在某个 CPU 核心上运行{进程独占 CPU 核心}'
数据 拷贝到 寄存器'
每个 CPU 核心可以独自运行
批处理进程:
竞争性,独立性,并行,并发
环境变量:>
PATH
echo $PATH '打印环境变量'
环境变量具有全局性;
程序地址空间:
+---------------------------+
+---------------------------+
| |
+---------------------------+
| 命令行参数环境变量 |
+---------------------------+
| 栈区 |
+---------------------------+
| / |
+---------------------------+
| 共享区 |
+---------------------------+
| / |
+---------------------------+
| 堆区 |
+---------------------------+
| 未初始化全局数据区 |
+---------------------------+
| |
| 初始化全局数据段 |
+---------------------------+
| 代码段 |
+---------------------------+
+---------------------------+
进程地址空间:>> 虚拟地址空间
页表:
:记录虚拟地址空间与物理地址之间的映射关系
$$$$****进程调度队列:{
:CPU 如何调度;
,调度的是什么
,调度 PCB
,调度队列里面存放着 结构体:
}
****Makefile 文档替换
all:fork
main:main.c
gcc $^ -o $@
fork:fork.c
gcc $^ -o $@
:nums/main/fork/g
有关代码:
#include
#include
/*
namespace N
{
int value = 100;
}
*/
//int value = 100;
int main()
{
int value = 100;
pid_t pid = fork();
if(pid < 0)
{
printf("create child process failed!!
");
return -1;
}
else if(pid == 0)
{
//子进程
printf("this is child!!! %d
", getpid());
}
else
{
//父进程
printf("this is parent!!! %d
", getpid());
}
while(1){
printf("pid:%d neihoua!!!:%d
", getpid(), value);
sleep(1);
}
printf("Hello world
");
return 0;
}
main.c
#include
#include
int main()
{
pid_t pid = getpid();
printf("current process id:%d
", pid);
while(1)
{
sleep(1);
}
printf("Hello world
");
return 0;
}