文章目录
目录
前言
一、前后台进程
1. 前台进程 (Foreground Process)
-
定义:默认情况下,用户在终端启动的进程会占用终端输入/输出,称为前台进程。
-
特点:
-
进程运行时,终端被“锁定”,用户必须等待进程结束才能输入新命令。
-
进程的输出直接显示在终端,用户可以通过键盘输入与进程交互(如输入参数或终止信号)。
-
-
示例:
# 启动一个前台进程(例如 ping 命令) ping example.com
2. 后台进程 (Background Process)
-
定义:进程在后台运行,不占用终端输入/输出,用户可继续使用终端执行其他命令。
-
特点:
-
终端不会被阻塞,用户可以继续输入命令。
-
进程的输出仍可能显示在终端(可能干扰当前操作),建议重定向输出到文件。
-
后台进程的生存期可能与终端会话绑定(若终端关闭,后台进程可能被终止,需使用
nohup
或disown
避免)。
-
-
启动方式:
# 在命令末尾添加 & 符号 ping example.com &
3. 前后台进程的切换
-
将前台进程放到后台:
-
按下
Ctrl + Z
暂停当前前台进程。 -
输入
bg
命令将暂停的进程转为后台运行。
-
-
查看后台进程列表:
jobs -l
-
将后台进程切换到前台:
fg %<job_number> # 例如 fg %1
4. 关键命令和操作
命令 | 作用 |
---|---|
command & |
直接启动后台进程 |
Ctrl + Z |
暂停当前前台进程 |
bg |
将最近暂停的进程转为后台运行 |
fg %n |
将后台进程 n 切换到前台 |
jobs -l |
列出所有后台/暂停的进程及其编号 |
nohup command & |
启动后台进程,终端关闭后仍存活 |
disown |
断开进程与终端的关联 |
5. 注意事项
-
输出干扰:后台进程的输出可能混杂在终端中,建议使用输出重定向:
command > output.log 2>&1 &
-
终端关闭问题:默认情况下,终端退出时会终止所有关联的后台进程。若需持久化运行:
-
使用
nohup
:nohup command &
-
使用
disown
:command & disown %1 # 脱离终端关联
-
使用终端复用工具(如
tmux
或screen
)。
-
6. 信号处理
-
前台进程可直接接收终端信号(如
Ctrl + C
发送SIGINT
,Ctrl + Z
发送SIGTSTP
)。 -
后台进程默认不接收键盘输入信号,但可能收到终端关闭时的
SIGHUP
信号(需通过nohup
或disown
避免)。
通过灵活使用前后台进程,可以高效管理终端任务,尤其适合需要长时间运行或并行操作的情景。
在 Linux 中,**守护进程(Daemon Process)**是一种特殊的后台进程,通常用于长期运行的服务或任务(如 Web 服务器、数据库服务等)。它完全脱离终端控制,独立于用户会话,生命周期与系统运行一致。以下是守护进程的特点及示例:
二、守护进程
1. 守护进程的核心特点
-
脱离终端:不依赖于任何终端,即使启动它的终端关闭,守护进程依然运行。
-
无交互界面:不与用户直接交互,通常以静默模式运行。
-
长期运行:持续驻留内存,提供系统级服务。
-
独立环境:
-
工作目录通常设置为根目录(
/
),避免占用挂载点。 -
文件权限掩码(
umask
)设为0
,确保文件操作权限可控。 -
关闭不必要的文件描述符(如标准输入、输出、错误流)。
-
2. 常见守护进程示例
-
系统服务:
-
sshd
:SSH 远程登录服务。 -
nginx
/apache
:Web 服务器。 -
cron
:定时任务调度服务。
-
-
自定义守护进程:
-
日志监控脚本。
-
自动化备份服务。
-
3.接口介绍
1、 fork()
- 功能:用于创建一个新的进程,这个新进程是调用进程(父进程)的副本,被称为子进程。在调用
fork()
之后,父进程和子进程会从fork()
调用处开始继续执行,通过fork()
的返回值