本文将从以下方面来理解进程:
1.进程的概念 / 什么是进程。
2.如何查看进程
3.进程状态 / 状态修改
4.进程的优先级
5.环境变量
1.通俗来说,进程就是正在运行的一个程序。
2.内核观点:担当分配系统资源(CPU时间,内存)的实体
3.操作系统的角度来说,进程描述为一个结构体---->PCB(在Linux下PCB位task_struct)
4.进程的创建是有限的
(1.)那么有人可能要问了task_struct是什么???
他是Linux内核的一种数据结构,他会被装载到RAM(内存)里并且包含着进程的信息
(2.)task_struct的内容分配
//1.查看所有进程
ls /proc/
//2.查看指定进程(例如要查看PID为1的进程信息)
ls /proc/1
//3.查看一个运行程序的个进程(这里用到了管道后边会讲)
ps aux | grep test | grep -v grep
我们可以通过系统调用来获取进程标识符:
1 #include
2 #include
3
4 int main()
5 {
6
7 printf("pid-> %d\n",getpid());
8 printf("ppid-> %d\n",getpid());
9
10 return 0;
11 }
以上是获取进程id的实现代码
1.进程的七大状态:(linux内核里有时候也叫任务)
2.修改进程状态
我们可以通过以下方式修改进程状态:
kill -SIGSTOP pid
3.僵尸进程(很重要!!!很重要!!!很重要!!!)
(1.)什么是僵尸进程????
在这里我是这样记忆,父进程就像是子进程的后妈,虽然是名义上的妈,但是对于子进程是不管不顾,不问其死活的
(2.)僵尸进程的危害:
4.孤儿进程
父进程先退出,但是子进程被init进程领养,那么这时候的子进程就是孤儿进程。他的资源也由init进程回收释放
(1.)概念
(2.)如何查看进程的优先级
//查看进程的优先级命令
ps -l
我们可以看到以上的信息:
这里我们可以看到NI(nice)值,这个nice值我们称之为进程优先级的可修正数据,所以:
PRI = PRI + NI(nice)
这里当NI为负数时,PRI最小及优先级最高
nice的取值范围是 19 ~ -20,一共四十个级别
(3.)进程优先级的修改
这是通过修改(NI)nice值来修改进程的优先级
1.nice命令
nice -n -5 ./test
这条命令是进程启动前进行修改
2.renice命令
//PID为4800的进程NI(nice)值设置为5
renice -5 -p 4800
这条命令是进程启后进行修改
3.利用top命令
top---->输入 r ---->输入 PID ---->输入要修改为多少的nice值
(4.)其他概念:
环境变量通常具有全局属性(可以被子进程继承下去)
(1.)如何查看环境变量???
1.直接用命令
//这里的name是环境变量的名称
echo $name
2.main函数的第三个参数
1 #include
2
3 int main(int argc,char *argv[],char *env[])
4 {
5
6 int i = 0;
7 for(;env[i];i++)
8 {
9 printf("%s\n",env[i]);
10 }
11 return 0;
12 }
~
这里就不截图运行后的结果了,大家还是自己多动手!!!
在这里补充说一下main函数的三个参数的含义:
3.通过第三方变量environ获取
1 #include
2
3 int main(int argc,char *argv[])
4 {
5
6 extern char **environ;
7 int i = 0;
8 for(; environ[i];i++)
9 {
10 printf("%s\n",environ[i]);
11 }
12
13
14 return 0;
15 }
4.调用getenv/putenv
1 #include
2 #include
3 int main()
4 {
5
6 printf("%s\n",getenv("PATH"));
7
8 return 0;
9 }
常用putenv和getenv来访问特定的环境变量
(2.)和环境变量相关的指令
(3.)环境变量的组织方式
我们可以看到每一个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针数组指向一个以 \0 结尾的环境字符串