截至目前,我们所认识的计算机,都是有一个个的硬件组成
输入单元:键盘,鼠标,扫描仪,写板等
中央处理器:含运算器和控制器
cpu运行速度极快,输入设备和输出设备运行速度极慢,存储器介于两者之间。(成指数级别的差距,所以需要存储器来进行缓冲)
为什么程序运行起来必须得先加载到内存里面?
程序运行必须通过cpu调用,cpu只能和内存打交道
任何计算机体系都包含一个基本的程序集合,称之为操作系统
包括:
设计OS的目的:
与硬件交互,管理所有的软硬件资源
为用户程序(应用程序)提供一个良好的执行环境
linux下的PCB:task_struct:存放在/usr/src/kernels/2.6.32-431.el6.i686/include/linux/sched.h
和linux一样
4、进程是程序的一次执行过程,需要保存进程的现场信息,这些信息需要一个数据结构来保存,在c语言中用结构体,我们将这个结构称之为PCB(process control block) PCB是操作系统感知一个进程存在的重要数据结构。
5、程序:代码段+数据段
进程:代码段+数据段+堆栈+PCB
PCB {
pc 下一条指令的地址
esp 栈顶指针
ebp 基址
}
1)进程是动态的,程序是静态的
2)进程是短暂的,程序是永久的
3)进程有PCB
4)一个进程只能对应一个程序,一个程序可以对应多个进程
方法一:
方法二:
cwd当前工作目录
exe绝对路径
方法三:
方法四:
多次运行后子进程就会发生改变
等待进程结束后就查看不到了:
列出
获取子进程和父进程,多次运行后,发现父进程一直不变,子进程每次都做相应的改变:
通过系统调用创建进程-fork初识
1 #include
2 #include
3 #include
4 int main()
5 {
6 int ret=fork();
7 if(ret<0)
8 {
9 perror("fork");
10 return 1;
11 }
12 else if(ret==0)
13 {
14 printf("I am child:%d!,ret :%d\n",getpid(),re t);
15
16 }
17 else//father
18 {
19 printf("I am father:%d!,ret:%d\n",getpid(),re t);
20 }
21 sleep(1);
}
Z-僵尸进程
僵尸进程危害:
孤儿进程:
- renice:调整已存在进程的nice :renice -5 -9 5200
- nice:启动进程前调整nice :nice -n -5 ./a.out
常见的环境变量
PATH: 指定命令的搜索路径
HOME:指定用户的主工作目录(即用户登陆到Linux系统时,默认的目录)
root和普通用户分别执行echo $HOME
- echo $NAME: 你的环境变量名称
#include
2 int main(int argc, char *argv[],char* env[])
3 {
4 int i=0;
5 for(;env[i];i++)
6 {
7 printf("%s\n",env[i]);
8 }
9 return 0;
10 }
1 #include
2 int main(int argc,char *argv[])
3 {
4 extern char **environ;
5 int i=0;
6 for(;environ[i];i++)
7 {
8 printf("%s\n",environ[i]);
9 }
10 return 0;
11 }
通过系统调用获取或设置环境变量
1 #include
2 #include
3 int main()
4 {
5 printf("%s\n",getenv("PATH"));
6 return 0;
7 }
1 #include
2 #include
3 int main()
4 {
5 char* env=getenv("MYENV");
6 if(env)
7 {
8 printf("%s\n",env);
9 }
10 return 0;
11 }
环境变量
定义变量: name=value # 等号左右不能有空格
删除变量: unset name
拓展:
1、pstree | grep -A2 -B2 bash 树状打印bash进程的前两行和后两行
2)、将自己定义的环境变量放在哪里? 终端打开就存在该环境变量
登录shell之前,会执行~/.bash_profile 文件,本用户的配置
/etc/profile 整个系统所有 所有用户的配置