进程学习总结
1.进程基本理解
正在执行的程序就叫进程。
2.进程的产生
在Linux环境下可以使用fork()函数创建进程,使用fork()函数的进程就是fork()函数产生进程的父进程。
3.对新产生进程的操作
使用exec系列函数
exec系列函数共同点就是把一个进程执行的程序换成你指定的程序
在一个进程中,如果你想执行多个程序,那就要使用exec系列函数。
在该进程中,使用fork函数产生一个子进程,然后在该子进程中使用exec子列函数把该进程执行的程序替换,就可以执行你的程序,执行完后退出回到父进程就好。
4.僵尸进程的产生
操在作系统中,一个父进程可以有很多子进程,父进程并不能预测子进程何时结束,所以需要父进程调用wait()/waitpid()函数收集子进程情况,以便子进程结束时系统能及时回收资源。当父进程未调用wait()/waitpid()函数时,若子进程结束,则该子进程成为僵死进程,占用系统的进程号。
5.孤儿进程
一个拥有子进程的父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(一般进程号为1的进程为init进程)所收养,并由init进程对它们完成状态收集工作。
6.危害
在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。 但是仍然为其保留一定的信息(包括进程号,退出状态,运行时间等等)。直到父进程通过wait() / waitpid()函数来取时才释放。 但这样就导致了问题如果进程不调用wait ()/ waitpid()函数的话, 那么系统保留的进程信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 这就是僵尸进程的危害。
孤儿进程一般没有什么危害,init进程会把他们妥善处理,当孤儿进程结束时init进程会自动将其回收