当前位置: 首页 > article >正文

Linux的前台进程和后台进程

  1. 概念定义
    • 前台进程
      • 前台进程是和用户直接交互的进程,它会占用终端的输入/输出(I/O)设备。当一个进程在前台运行时,它会从终端读取用户输入的命令,并且将输出结果显示在终端上。例如,当你在终端中运行一个文本编辑器(如vinano)时,这个文本编辑器就是前台进程,你可以直接在这个编辑器中进行输入文字、保存文件等操作,它的输出(如打开文件后的内容显示)也会呈现在终端屏幕上。
    • 后台进程
      • 后台进程是在后台运行的进程,它不直接和终端的I/O进行交互。后台进程通常用于执行一些不需要用户立即关注的任务,比如长时间的计算任务、数据备份任务、服务器的守护进程等。例如,在服务器环境中,httpd(Apache服务器)进程大部分时间是在后台运行,它负责接收和处理来自客户端的网页请求,不需要用户在终端一直盯着它的运行过程。
  2. 运行方式和特点
    • 前台进程
      • 运行方式:通过在终端中输入命令直接启动一个进程,这个进程默认就是前台进程。例如,运行./my_program(假设my_program是一个可执行文件),这个my_program就会在前台运行。
      • 特点:
        • 独占终端:前台进程会一直占用终端,直到它运行结束或者被暂停(如通过Ctrl + Z组合键)。在它运行期间,终端不能用于其他操作,除非暂停或终止这个前台进程。
        • 对终端信号敏感:前台进程会接收并处理终端发送的信号。例如,当用户在终端中按下Ctrl + C组合键时,前台进程会收到SIGINT(中断信号)并通常会终止运行,除非它对这个信号进行了特殊的处理(如信号捕获和忽略)。
    • 后台进程
      • 运行方式:
        • 在命令后添加&符号可以将一个进程放到后台运行。例如,./my_program &,这样my_program就会在后台启动。
        • 已经在前台运行的进程可以通过Ctrl + Z组合键暂停,然后使用bg命令将其放到后台继续运行。
      • 特点:
        • 不占用终端I/O:后台进程不会阻止用户在终端进行其他操作,它的输出信息(标准输出和标准错误输出)可以通过重定向的方式保存到文件中,这样就不会在终端显示,干扰用户的其他操作。例如,可以使用> output.log 2> error.log来分别将标准输出和标准错误输出重定向到output.logerror.log文件中。
        • 对信号处理方式不同:后台进程也会接收信号,但对一些信号的默认处理方式可能和前台进程不同。例如,后台进程一般不会因为Ctrl + C而终止,除非它专门对SIGINT信号进行了处理。
  3. 进程状态和控制
    • 前台进程状态
      • 运行(R):当前台进程正常运行时,在ps命令的输出中(如ps -ef)显示为R状态,表示正在运行并占用CPU资源。
      • 暂停(T):如果通过Ctrl + Z组合键暂停了前台进程,它的状态会变为T,表示停止运行。此时可以使用fg命令将其恢复到前台继续运行。
    • 后台进程状态
      • 运行(R):后台进程在正常运行时也显示为R状态,不过它不会占用终端的I/O设备。
      • 停止(T):和前台进程类似,后台进程也可以被暂停,状态变为T。可以使用bg命令让它在后台继续运行,或者用fg命令将其恢复到前台运行。
    • 进程控制命令
      • fg(foreground)命令:用于将后台进程恢复到前台运行。例如,如果有一个后台进程的作业号(可以通过jobs命令查看)为1,使用fg %1就可以将这个后台进程恢复到前台。
      • bg(background)命令:用于让暂停的后台进程在后台继续运行。例如,对于一个暂停的后台进程,使用bg命令可以使其在后台继续运行。
      • jobs命令:用于查看当前终端后台运行的进程信息,包括作业号、进程状态、命令等内容。例如,jobs -l会列出后台进程的详细信息,包括进程ID等。

http://www.kler.cn/a/412100.html

相关文章:

  • 【AI学习】Mamba学习(十八):S6的硬件感知设计
  • burp功能介绍
  • 35 基于单片机的精确电压表DA-AD转换
  • GitLab指定用户分配合并权限
  • Http文件上传
  • 基于混合ABC和A*算法复现
  • Git旧文件覆盖引发思考
  • Day 27 贪心算法 part01
  • 排序算法(六)--堆排序
  • Linux17 Git 指令
  • NIO三大组件
  • OpenAI 是怎么“压力测试”大型语言模型的?
  • C#中面试的常见问题005
  • 【ArcGIS Pro实操第10期】统计某个shp文件中不同区域内的站点数
  • 探索Python自动化新境界:Helium库揭秘
  • 三六零[601360]行情数据接口
  • Angular面试题汇总系列一
  • 玩转 Burp Suite (1)
  • 硬菜!高精度!BO-Transformer贝叶斯优化编码器多特征分类预测/故障诊断
  • 【jupyter】linux服务器怎么使用jupyter
  • Android 网络通信(三)OkHttp实现登入
  • 【es6进阶】vue3中的数据劫持的最新实现方案的proxy的详解
  • java-使用HSSFWorkbook编辑excel文件
  • 《Hello YOLOv8从入门到精通》5,颈部网络(Neck)结构、核心源码和参数调优
  • 用 C++ 写一个 AWS Lambda Hello World
  • zabbix“专家坐诊”第265期问答