- 概念定义
- 前台进程:
- 前台进程是和用户直接交互的进程,它会占用终端的输入/输出(I/O)设备。当一个进程在前台运行时,它会从终端读取用户输入的命令,并且将输出结果显示在终端上。例如,当你在终端中运行一个文本编辑器(如
vi
或nano
)时,这个文本编辑器就是前台进程,你可以直接在这个编辑器中进行输入文字、保存文件等操作,它的输出(如打开文件后的内容显示)也会呈现在终端屏幕上。
- 后台进程:
- 后台进程是在后台运行的进程,它不直接和终端的I/O进行交互。后台进程通常用于执行一些不需要用户立即关注的任务,比如长时间的计算任务、数据备份任务、服务器的守护进程等。例如,在服务器环境中,
httpd
(Apache服务器)进程大部分时间是在后台运行,它负责接收和处理来自客户端的网页请求,不需要用户在终端一直盯着它的运行过程。
- 运行方式和特点
- 前台进程:
- 运行方式:通过在终端中输入命令直接启动一个进程,这个进程默认就是前台进程。例如,运行
./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.log
和error.log
文件中。 - 对信号处理方式不同:后台进程也会接收信号,但对一些信号的默认处理方式可能和前台进程不同。例如,后台进程一般不会因为
Ctrl + C
而终止,除非它专门对SIGINT
信号进行了处理。
- 进程状态和控制
- 前台进程状态:
- 运行(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等。