进程的概念
什么是程序?什么是进程?二者有什么区别?
程序是一堆待执行的代码。 -> 静态的文本数据。 project.c (C程序) / project (可执行程序)
进程是当程序被CPU加载时,根据没一行代码做出相应的动作,才能形成一个真正动态的过程,那么这个过程就称之为进程! -> 动态过程!
如何在linux中开启新的进程?
在linux执行程序即可。
程序: project
开启新的进程: ./project -> 开启进程!
当程序被执行时,除了在内存空间中分配空间之外,还会分配一个task_struct结构体给进程。
也就是说:每启动一个进程,就会得到一个task_struct结构体!
/usr/src/linux-headers-3.5.0-23/include/linux/sched.h
查看进程信息
依然将实验放在MYZR-i.MX8M-EVK开发板上进行,给开发板烧录了ubuntu后就可以开始了。
查看整个系统所有进程的关系网:pstree
systemd进程称之为"祖先进程"
systemd进程有5个子进程,分别是:NetworkManager、 accounts-daemon、agetty等
查看系统所有进程的PID号 : ps -ef
查看进程CPU占用率/当前系统总进程数/进程状态个数 : top
进程诞生与死亡
进程的状态
当执行一个程序,就诞生了一个新的进程。
就绪态: 不占用CPU资源,不运行代码。
运行态: 占用CPU资源,运行代码
暂停态: 占用CPU资源,不运行代码,可以切换到就绪态/运行态
僵尸态: 占用CPU资源,不运行代码,不可以切换到就绪态/运行态
死亡态: 不占用CPU资源,不运行代码,进程结束。
什么是占用CPU资源?
其实代表task_struct结构体资源没有被释放。
进程的生老病死过程需要注意点:
1)进程在暂停态收到继续信号时,切换到就绪态,而不是运行态。
2)进程退出时,一定会变成僵尸态。
3)进程不可以同时拥有两个父亲。
4)孤儿进程特点: 当自己还在运行态时,父进程已经退出了,马上寻找init作为自己的继父。
5)init进程特点:一定会帮所有的孤儿回收资源。