Linux进程学习笔记

来源:互联网 发布:什么软件有电视直播 编辑:程序博客网 时间:2024/04/28 09:26

1.对进程的理解

进程是一段程序的一次执行过程。表面上看,可以理解为一个main函数执行了两次,但是细节是:父进程是完整的执行的,从开始到结束;而子进程是fork函数之前的部分没有执行,从fork()函数之后开始执行,一直到程序结束。

2.fork()函数

功能:产生一个子进程

函数原型:

#include <sys/types.h>

#include <unistd.h>

pid_t fork(void);

在父进程中:成功返回子进程的PID,失败返回-1

在子进程中:成功返回0

在fork之前,对内存变量的所有操作将保存到fork()处,作为父进程和子进程的初始内存状态。

如果成功,则从fork位置,子进程和父进程的内存空间都是一样的(除了pid_t这个返回值),可以认为子进程的内存变量就是父进程的一份拷贝。但是从fork()之后,二者的内存空间就开始独立了,父进程中改变某个变量,对子进程将没有任何影响;同样,子进程改变某个变量,对父进程也不会有影响。如果想要二者交换数据,则需要使用进程间通信。

3.wait()函数

功能:父进程将自己挂起,等待子进程结束,再继续运行。

函数原型:

#include <sys/types.h>

#include <sys/wait.h>

pod_t wait(int *stat_loc);

stat_loc:状态信息

返回值:子进程PID

4.孤儿进程

一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

5.僵尸进程

  一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,直至父进程结束,这种进程称之为僵尸进程。

时间范围:子进程结束后——父进程结束(在父进程结束后,僵死的子进程将成为僵死的孤儿进程,这时就可以有init进程领养,并释放了)

危害:占用进程号,占用资源。

0 0
原创粉丝点击