查看进程
1.文件系统查看
Linux中进程信息保存在/proc目录下,子目录是以进程PID命名.
2.命令查看
- top命令
top工具就像是Windows中的任务资源管理器,在这里我们可以查看各种进程和设备资源状况.
- ps命令
ps命令为Linux中查看进程状态的命令,通常使用ps -aux或是ps -ajx.使用ps命令搭配管道和grep指令,我们可以很方便地对进程进行查看.
3.系统调用
除了命令外,我们在编写代码时候,有时候也许要对进程进行控制,这种时候我们就可以使用系统调用getpid()/获取当前进程pid
,getppid()获取当前进程父进程pid
.另外这里引出一个系统调用fork.
fork
fork()
函数,一开始学习fork()
可能会觉得比较反直觉,我用下面的一段代码来体现:
#include <stdio.h>
#include <sys/types.h>
#include <stdio.h>
int main()
{
printf("我是父进程,我的pid:%d\n",getpid());
pid_t id = fork();
if(id==0)
printf("我是子进程,我的pid:%d,父进程的pid:%d\n",getpid(),getppid());
else if(id<0)
return 1;
while(1)
{
printf("我是父进程,我的pid:%d\n",getpid());
sleep(1);
}
return 0;
}
通过这段代码,我们可以发现这里的id同时有两个返回值.fork()
对子进程返回0,对父进程返回子进程返回子进程pid.
正因如此,我们在使用了fork()
之后,我们通常是要使用if()
进行分流,以便让父进程和子进程对应不同的执行流.
进程状态
进程状态概览
- R(running)–运行状态
- S(sleeping)–睡眠状态
- D(disksleep)–磁盘休眠状态
- T(stopping)–停止状态
- t(tracing stop)–跟踪停止状态
- x(dead)–死亡状态
- Z(zombie)–僵尸状态
僵尸进程
- 僵尸进程是一种比较特殊的状态,当进程退出,但是父进程并没有及时读取子进程退出时就会出现僵尸进程.
- 僵尸进程会等待父进程回收数据,所以会一直维持僵尸状态.
- 进程在内核的体现是PCB.
- 那么僵尸进程就会一直占用PCB–内存泄漏.
孤儿进程
- 和前文提到的僵尸进程相反,孤儿进程是父进程提前退出,导致子进程没有进程来维护,成为孤儿进程.
- 孤儿进程会被
pid=1进程(init)
领养,又该进程来回收.
进程优先级
- cpu往往需要同时调度多个进程,cpu资源分配的先后顺序就是进程优先级.
- 有高优先级的进程有优先执行的权利,良好的设置进程优先级可以很好地改善多任务情景系统性能.
- 把不重要的进程绑定到指定的cpu上,也可以改善性能.
nice值
在Linux系统命令行中使用ps -l
命令后可以看到PRI(priority)
和NI(nice)
两栏数据.
- PRI就是进程优先级.(越低优先级越高)
- NI是PRI的修正值,通常情况下,我们直接修改PRI会破坏环境,导致系统不稳定.所以我们可以使用NI
来修正PRI数据,真实的进程优先级为PRI+NI. - NI的取值范围是-20–19.一共40个档位.
环境变量
概念
环境变量是我们系统运行环境的一些参数.
常见的一些环境变量
- 环境变量采用大写的风格.
- PATH
- HOME
- SHELL
查看环境变量的方法
查看环境变量使用指令
echo $NAME
.
相关命令
- echo:显示某个环境变量的值.
- export:设置一个新的环境变量.
- env:显示所有的环境变量.
- unset:清楚环境变量.
- set:显示本地定义的shell变量和环境变量.
终于把前置的知识讲完了,下一篇开进程地址空间.