进程及其相关接口函数

本文介绍了Linux中的进程概念,包括程序与进程的区别、进程的类型和状态,详细阐述了进程的创建(fork)、结束(exit/_exit)、回收(wait、waitpid)以及如何创建守护进程。此外,还提供了创建守护进程并记录时间的日志实例。
摘要由CSDN通过智能技术生成

1、进程

程序:静态的,有序指令的集合

进程:是系统分配资源的总称,是程序执行的一次完整过程(创建、调度、执行、消亡)

(1)程序的组成:

​ 正文段、用户数据段、系统数据段(PCB<进程控制块>、PC、堆栈)

<1>PCB:

  • ​ 进程ID
  • ​ 用户名、用户组名
  • ​ 进程的状态、优先级
  • ​ 文件描述符表

<2>PC(程序寄存器):

  • ​ 记录程序下一条指令的地址
  • ​ 堆栈(栈)
(2)进程的类型

​ <1>交互进程:和终端相关,可以在前台运行,也可以在后台

​ <2>批处理进程:和终端无关,可以将指定的进程放在一个工作队列中按顺序执行,一般由系统管理员操作

​ <3>守护进程:和终端无关,在后台一直循环执行任务

(3)进程的状态
进程相关指令
ps -ef -->查看当前系统进程
ps -aux -->查看当前系统进程,还会1显示当前进程状态
top -->每隔三秒,显示进程的实时信号

​ <1>运行态(就绪态)–R–正在运行或准备运行的进程

​ 等待态: [区别在于能否被信号打断]

​ <3>可中断等待态–S–

​ <4>不可中断等待态–D–

​ <5>暂停态–T–暂停运行,直到有信号唤醒位置

​ <6>僵尸态–Z–进程结束后,没有进行资源回收,该进程变为僵尸态

2、进程相关接口函数

1、创建子进程–fork
#include <sys/types.h>
#include <unistd.h>

pid_t fork(void);
返回值:
    成功创建一个新的子进程,父进程返回子进程的PID号,子进程返回0
    失败父进程返回-1,没有子进程被创建
    PPId-->父进程
    
getpid()--->获取当前进程的pid    
    

父子进程:

一 个进程通过 fork 函数创建一个新的进程,原本进程称为新进程的父进程,新的进程称为原进程的子进程

子进程会维承父进程中几乎所有数据

(1)、如果父进程优先于子进程结束:

​ 子进程称为孤儿进程,由前台进程变为后台进程,统一由init进程收养

(2)、如果子进程优先于父进程结束:

​ 子进程状态变为僵尸态

一般来说,如果子进程先于父进程结束,子进程应该统一由父进程回收

​ ***子进程在 fork语句的下一条指令开始执行

虽然当父进程结束后系统会自动回收,不过当是一些不方便结束的父进程:
如:服务器、网页等,我们就需要把进程给结束掉,所有接下来时进程的结束。

2、结束进程–exit()/_exit()
#include <stdlib.h>

       void exit(int status);
	参数:
        status:表示进程退出的状态
--------------------------------------------------------
#include <unistd.h>

       void _exit(in
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值