【C++服务器入门基础------2.进程管理】

本文介绍了C++在Linux环境下关于进程管理的基础知识,包括进程与程序的区别、进程控制块PCB、进程的六种状态及其转换,以及init进程、父子进程的概念。详细讲解了fork、exec函数族、system函数、wait和waitpid函数的使用,同时探讨了如何避免产生僵尸进程。最后讨论了守护进程的编程步骤,阐述了其脱离终端并独立运行的特点。
摘要由CSDN通过智能技术生成

大学生寒假在家过于无聊,整理一下以前学过的知识,顺便复习一下,水平较低,专业性差,仅供参考,不喜勿喷(反正也没人看)。尽量一两天更一篇。

一、程序和进程

(1)概念

程序(program)是存放在磁盘文件中的可执行文件。

程序的执行实例被称为进程(process),它是系统拥有资源的基本单位,是操作系统结构 的基础。

(2)区别

程序

·程序是可执行文件,存放在磁盘文件中

·程序是静态存储的

·根据用户操作执行

·利用操作系统的文件管理系统进行管理

进程

·动态储存在内存中,双击程序后产生

·Linux内核的PCB(进程控制模块)进行管理

·内核提供函数进行访问,存在生命周期

·每个linux进程都一定有一个唯一的数字标识符,称为进程 ID(PID),进程ID总是一非负整数

·进程可以有多个,但进程ID不同;程序只有一个

(3)PCB

·为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。

·PCB中记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部息。

程序:程序段+数据段

进程实体:程序段+数据段+PCB 

二、进程状态

许多操作系统教科书上用的是三态模型(运行态,就绪态,阻塞态)或五态模型(新建态、终止态,运行态,就绪态,阻塞态),这里我所讲的进程状态特指linux下的6种进程状态。

·运行状态R(TASK_RUNNING)

·可中断睡眠状态S(TASK_INTERRUPTIBLE)

·不可中断睡眠状态D(TASK_UNINTERRUPTIBLE)

·暂停状态T(TASK_STOPPED或TASK_TRACED)

·僵尸状态Z(TASK_ZOMBIE)

·退出状态X(TASK_DEAD)

(1)运行状态R

只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上运行。用一句话来说,正在CPU上运行的进程与正在等待CPU资源调度的进程都属于这个状态。

(2)可中断睡眠状态S

处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。这些进程的task_struct结构被放入对应事件的等待队列中。当这些事件发生时(由外部中断触发、或由其他进程触发),对应的等待队列中的一个或多个进程将被唤醒。用一句话来说,正在等待某些事件发生的进程就属于这个状态,如果事件发生,

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值