怎样让一个命令后台运行 如何查看正在后台执行的进程 如何将正在后台运行的进程转为前台执行
深入掌握 Linux 后台进程管理:命令后台运行、进程查看与前后台切换
在 Linux/Unix 系统中,高效地管理后台进程是提升工作效率的关键。本文将详细解答三个核心问题:怎样让一个命令后台运行,如何查看正在后台执行的进程,以及如何将正在后台运行的进程转为前台执行。通过理解这些基本操作,您将能更自如地利用命令行工具处理复杂的任务。
一、 怎样让一个命令后台运行
将一个命令放到后台运行,意味着该命令不会阻塞您的当前终端会话,您可以继续执行其他命令。最常用的方法是在命令的末尾添加一个 `` 符号。
1. 使用 `` 符号
这是最直接也最普遍的方式。只需在你想要后台运行的命令后面加上 ``。
示例:
sleep 60
这条命令会让 `sleep 60` 这个命令在后台运行,持续 60 秒,而你的终端会立即返回,你可以继续输入其他命令。你可能会看到类似 `[1] 12345` 的输出,其中 `[1]` 是作业号,`12345` 是该进程的 PID(进程 ID)。
2. 使用 `nohup` 命令
`nohup` 命令用于在用户退出登录后,仍然让指定的命令继续运行。它还会将命令的标准输出重定向到一个名为 `nohup.out` 的文件中,避免终端关闭时命令被中断。
示例:
nohup your_command
例如,要让一个长时间运行的脚本在后台执行,并且不担心终端关闭时丢失:
nohup python my_script.py
这样,即使你关闭了当前终端,`my_script.py` 也会继续在后台运行,并且其输出会记录在 `nohup.out` 文件中。
3. 使用 `screen` 或 `tmux`
虽然 `screen` 和 `tmux` 本身不是直接让命令后台运行的命令,但它们提供了更强大的终端会话管理功能,允许你创建持久化的终端会话。你可以在这些会话中运行命令,然后分离会话,即使断开 SSH 连接,会话中的进程也会继续运行。之后你可以随时重新连接到会话,继续之前的操作。
使用 `screen` 的基本步骤:
- 启动一个新的 screen 会话:
screen - 在 screen 会话中执行你的命令,例如:
python my_server.py - 分离 screen 会话(让其在后台运行):按
Ctrl+A然后按D。 - 重新连接到 screen 会话:
screen -r(如果有多个会话,可能需要指定会话 ID)。
tmux 的用法与 `screen` 类似,提供更现代化的界面和功能。
二、 如何查看正在后台执行的进程
一旦命令被放到后台运行,你需要一种方法来监控它们。Linux 提供了多种工具来查看正在运行的进程。
1. 使用 `jobs` 命令
`jobs` 命令用于显示当前 Shell 会话中正在运行的后台作业(jobs)。这些作业是由当前 Shell 启动的,并且是使用 `` 符号或 `Ctrl+Z` 暂停后使用 `bg` 命令放到后台的。
示例:
jobs -l
`-l` 选项会显示每个作业的 PID。
输出示例:
[1]- Running sleep 60 [2]+ Stopped vim
这里的 `[1]` 和 `[2]` 是作业号,`Running` 或 `Stopped` 表示状态,`sleep 60 ` 和 `vim` 是命令本身。
2. 使用 `ps` 命令
`ps` (process status) 命令是查看系统进程最常用的工具。它可以显示当前系统中运行的进程信息,包括 PID、CPU 使用率、内存占用等。
常用组合:
ps aux:显示所有用户的进程,包括那些没有终端的进程。ps -ef:以全格式显示所有进程。
如果你想查找特定的后台进程,可以结合 `grep` 命令。
示例:查看所有 Python 进程
ps aux | grep python
如果你知道后台进程的 PID(例如 `jobs -l` 输出的 PID),可以直接查看:
示例:查看 PID 为 12345 的进程
ps -p 12345 -o pid,ppid,cmd,%cpu,%mem
其中 `-o` 选项允许你指定显示的列,例如 PID、父进程 PID、命令、CPU 使用率、内存占用等。
3. 使用 `top` 命令
`top` 命令提供了一个动态的、实时的进程监视器。它会持续显示系统中消耗 CPU 和内存最多的进程,并会不断更新。
运行 `top` 后,你可以看到一个列表,其中包含 PID、用户、CPU 占用、内存占用、命令名等。你可以通过按下 `k` 键来杀死进程,按下 `q` 键退出。
在 `top` 界面中,你也可以通过按下 `f` 键来选择显示的字段,或者按下 `O` (大写 O) 来按照某个字段排序,例如 CPU 占用或内存占用。
4. 使用 `htop` 命令
`htop` 是 `top` 命令的增强版,提供了一个交互式的、彩色的进程查看器。它比 `top` 更易于使用,并且支持鼠标操作。
安装 `htop` (如果你的系统没有安装):
- Debian/Ubuntu:
sudo apt update sudo apt install htop - CentOS/RHEL:
sudo yum install epel-release sudo yum install htop
运行 `htop` 后,你可以直观地看到进程树、CPU/内存使用情况,并可以通过方向键、F 键等进行操作。
三、 如何将正在后台运行的进程转为前台执行
有时候,你可能需要将一个正在后台运行的进程重新调回前台,以便与它进行交互,或者在它完成前继续监控。这通常用于那些被 `Ctrl+Z` 暂停后使用 `bg` 命令放到后台的进程。
1. 使用 `fg` 命令
`fg` (foreground) 命令用于将一个后台作业(job)调回到前台。它通常与 `jobs` 命令结合使用。
- 首先,使用 `jobs` 命令查看当前 Shell 会话中的后台作业,并记下你想要调回前台的作业号。
- 然后,使用 `fg` 命令,后面跟上作业号。
示例:将作业号为 1 的进程调到前台
fg %1
注意,这里的 `%1` 表示作业号 1。如果只有一个后台作业,你也可以直接输入 `fg`。
一旦进程被调到前台,它就会恢复运行,并且你的终端会话将再次被该进程占用,直到进程结束或者你再次将其发送到后台。
2. 使用 `bg` 命令(作为对比)
虽然 `bg` 命令是用来将暂停的进程放到后台运行,但理解它有助于我们理解 `fg` 的工作原理。如果你在一个命令运行时按下 `Ctrl+Z`,该命令会被暂停。然后你可以使用 `bg` 命令将其放到后台继续运行。
示例:
1. 运行一个命令:
vim large_file.txt2. 按下
Ctrl+Z暂停 `vim`。3. 输入
bg将 `vim` 放到后台继续运行。4. 使用
jobs查看,你会看到 `vim` 处于后台运行状态。5. 使用
fg %1将 `vim` 调回前台。
3. 注意事项
需要注意的是,`fg` 命令通常只能将由当前 Shell 启动的后台作业(jobs)调回前台。对于使用 `nohup` 或在 `screen`/`tmux` 会话中运行的进程,它们并不是当前 Shell 的“作业”,因此 `fg` 命令无法直接操作它们。对于 `nohup` 进程,你可能需要找到其 PID,然后使用 `kill` 命令来停止它。对于 `screen`/`tmux` 会话中的进程,你需要重新连接到相应的会话来与之交互。
通过掌握以上这些命令和技巧,你将能更加灵活和高效地管理你的 Linux 系统中的后台进程,无论是启动、监控还是切换,都能游刃有余。