您的位置:首页 > 运维架构 > Linux

Linux学习-进程管理

2014-10-09 10:10 225 查看

创建进程

Linux系统中,调用fork函数通过复制一个现有进程来创建一个新的进程,在调用结束时,再返回点这个相同的位置上,父进程恢复执行,子进程开始执行。Linux的fork使用写时拷贝(copy-on-write)页实现,资源的复制只有在写入时才进行,在此之前,只以只读方式共享,这种技术使地址空间上的页的拷贝被推迟到实际发生写入时才进行。fork的实际开销就是复制父进程的页表以及给子进程创建唯一的进程描述符。

vfork与fork功能相似,子进程作为父进程一个单独的线程在它的地址空间里运行,父进程被阻塞,直到子进程退出或执行exec。vfork的好处就仅限于不用拷贝父进程的页表项。

exec函数可以创建新的地址空间,并把新的程序载入。

进程通过exit系统调用退出执行,这个函数会终结进程并释放其占用资源。

进程执行结束后,被保持在已终止状态,直到被它父进程调用wait或waitpid回收,一个终止了但未被回收的进程称为僵死进程。如果父进程没有回收它的僵死子进程就终止了,内核会安排Init进程回收它们。

进程描述符

进程描述符用task_struct结构表示,进程描述符中包含:它打开的文件,进程的地址空间,进程的状态等。

进程状态

进程描述符中的state域描述了进程当前状态,有5种状态:

TASK_RUNNING(运行):进程是可执行的,或者正在运行,或者在等待队列中等待执行。

TASK_INTERRUPTIBLE(可中断):进程被阻塞,等待某些条件达成。

TASK_UNINTERRUPTIBLE(不可中断):除了接收到信号也不会被唤醒,这个状态与可中断状态相同,通常在进程必须在等待时不受干扰或等待时间很快发生时出现。

_TASK_TRACED:被其他进程跟踪的进程。

_TASK_STOPPED:进程停止运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux