一、后台进程
在后台运行进程是 Linux 系统中的常见要求。在后台运行进程允许您在进程独立运行时继续使用终端或执行其他命令。这对于长时间运行的任务或当您想要同时执行多个命令时特别有用。
在深入研究各种方法之前,让我们先了解一下什么是后台进程。在 Linux 中,后台进程是指独立于终端运行的进程。执行命令时,它通常在前台运行,这意味着它会占用终端直到完成。另一方面,在后台运行进程允许您执行其他命令,而进程则继续默默运行。
二、如何在后台运行 Linux 命令
1. 在命令后添加一个 & 符号
运行 Linux 后台命令的最简单方法是在命令后添加一个“与”符号( & )。例如,如果您从终端启动 gedit 文本编辑器,则在关闭编辑器之前无法使用 shell。但是,当您在命令中添加额外的&时,它会告诉 Bash 在后台运行该命令,以便您立即使用 shell。
gedit &
2. 使用 bg 将正在运行的命令发送到后台
有时,您运行命令后才发现它需要很长时间才能完成。您可以通过按下Ctrl + Z键,然后使用bg命令,轻松地将此类命令发送到后台。按下Ctrl + Z可停止正在运行的进程,而bg可将其发送到后台。
您可以在终端中输入jobs来查看所有后台任务的列表。使用fg命令将后台进程调到前台。
如果后台有多个作业正在运行,您可以输入fg后跟%n,其中n是作业 ID。例如,要将后台作业2移到前台,命令如下:
fg %2
要终止后台作业,请在 kill 命令后使用%和作业 ID。
3. 使用 nohup 将命令发送到后台
Linux 中的nohup命令允许管理员运行不受 HUP 或Hang Up信号影响的终端命令。您可以使用 nohup 在 Linux 上轻松地在后台运行命令。
下面的示例在后台运行一个简单的 Nmap 端口扫描:
nohup sudo nmap -sS --top-ports=15 192.168.1.1/24
nohup 的一个主要优点是,即使退出 shell,命令也会运行。此外,它还会生成执行的日志文件。在当前目录或 $HOME 中查找nohup.out 。
4. 使用系统重定向运行后台命令
您还可以使用系统重定向在 Linux 中运行后台命令。例如,如果您运行以下 ping 命令,您的 shell 将在后台运行它并立即将终端控制权交还给您:
ping -c5 8.8.8.8 > output.log 2>&1 &
这里 ping 命令的输出被重定向到output.log文件。如果要丢弃结果,可以将其替换为/dev/null。2>&1告诉 Bash 将任何错误重定向到同一个文件。最后的&指示 Bash 在后台运行此命令。
5. 使用 disown
disown命令可让您轻松地在后台运行进程。首先,您需要使用&运算符将任务发送到后台。然后,输入disown以将其从 shell 中分离。
gedit & disown
disown 的一个主要优点是,与 nohup 一样,当您关闭 shell 或注销时,系统不会终止您的任务。
6. 使用 tmux
tmux 是一款功能强大的多路复用器,可让您在单个窗口中运行多个终端会话。对于不熟悉 Linux 的人来说,学习如何使用和配置 tmux是一个绝佳的选择。tmux 让在 Linux 中运行后台命令变得轻而易举。
tmux new -d 'ping -c 10 8.8.8.8 > output.log'
当您运行上述tmux命令时,它将在单独的 shell 中执行ping命令并使其在后台运行。您可以使用此方法在后台启动任何 Linux 进程或命令。