熟悉的二哈开头 这一章讲述关于Linux的进程的具体内容
冯诺依曼体系结构
这就是计算机的基本组成成分,几乎包括所有的计算机。
输入设备
包括键盘,鼠标等外部输入的设备
存储器
这里指的是内存条
运算器和控制器
其都在cpu之中组成(cpu封装有这些东西)
输出设备
包括屏幕,声音🔊等输出消息的设备
操作系统
内核和其他程序组成,主要是起管理的作用
上面的内容是粗省略介绍了关于计算机
进程
基本概念
一个正在执行的程序实例
被存放在PCB之中(process control block)
在Linux中描述进程的结构体叫做task_struct。
task_struct是Linux内核的一种数据结构,会被装载在内存之中。
这种结构体包括进程的信息
task_struct的内容分类
标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
其他信息
上面的内容😱仅供参考,本人一些内容也不知道(复制粘贴来的,关于内容分类)
进行进程查看(反正内容一些,我没有看懂!)
通过指令进行导入系统文件
进程的信息可以通过 /proc 系统文件夹查看
左边为进程信息
通过系统调用获取进程标示符
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
printf("pid: %d\n", getpid());
printf("ppid: %d\n", getppid());
return 0;
}
在Linux之中运行用gcc,然后可以得到结果!gcc的使用之后好会讲述!
通过fork初始创建进程
通过Linux的gcc,然后应用这个进程操作
具体的操作我还没有看懂
让进程复制为两个完全相同的字子,父进程。而我们的操作都是在子进程之中进行的。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int ret = fork();
printf("hello proc : %d!, ret: %d\n", getpid(), ret);
sleep(1);
return 0;
}
进程的状态
可以通过看进程代码可以看成进程的不同状态
R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列
里。
S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠
(interruptible sleep))。
D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),
在这个状态的进程通常会等待IO的结束。
T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。
这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
进程状态查看的指令
ps 【选项】 【参数】
选项
-A:列出所有的行程(执行的程序)
-w:显示加宽可以显示较多的资讯
-au:显示较详细的资讯
-aux:显示所有包含其他使用者的行程
au(x):输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
-U <用户识别码> :列出属于该用户的程序的状况,也可使用用户名称来指定,-u选项同-U
这些内容可以做为基本了解
僵尸进程
利用fork进行子父程序的创建。如果父程序被关闭,而子程序没有被关闭。
会造成内存泄露,从而造成不可改变的情况。必须要进行内存的回收。
环境变量
基本概念
环境变量(environment variables)
一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。
环境变量基本操作方式
1. echo: 显示某个环境变量值[重点]
2. export: 设置一个新的环境变量[重点]
这里设置一个环境变量为a
3. env: 显示所有环境变量[重点]
后面还有具体内容这里不进行描述
4. unset: 清除环境变量
6. set: 显示本地定义的shell变量和环境变量
常见的环境参数
PATH : 指定命令的搜索路径 [重点]
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)[重点]
(不同的用户的环境参数的内容不相同,例如root和普通用户的参数)
这个为root用户的 这个外普通用户的root内容
SHELL : 当前Shell,它的值通常是/bin/bash。
环境变量的组织方式
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串
环境变量通常是具有全局属性的
具有全局性可以被继承子程序下去
关闭一个程序之后,不可以查找到对应的环境变量。而重新运行这个程序环境变量会重新出现
关于Linux进程的相关内容到此为止。
这篇文章,仅仅用于自己做笔记相关内容有错误请指出。谢谢🙏,我们相互学习🏫!
|