如何在后台运行Linux命令

Linux命令是使用终端与系统交互的好方法。然而,有时候可能需要一段时间才能完成手头的任务。这迫使用户要么等待一段相当长的时间来完成这个过程,要么完全生成一个新的shell。

幸运的是,您可以通过以下一些简单的方法在后台运行Linux命令。

1.在您的命令后添加一个与号

运行Linux后台命令的最简单方法是在命令后添加一个Ampersand()符号。&例如,如果从终端启动gedit文本编辑器,则在关闭编辑器之前不能使用shell。但是,当你在命令中添加额外的命令时,它会告诉Bash在后台运行该命令,让你可以立即使用shell。&

gedit& 

类似地,您可以在后台运行Bash脚本,方法是指定脚本名称,后面加上Ampersand()符号:&

./script.sh& 

2.使用bg将运行命令发送到后台

有时你运行一个命令,却发现它需要更长的时间才能完成。您可以通过按Ctrl + Z键,然后使用bg命令轻松地将这些命令发送到后台。按Ctrl + Z会停止运行的进程,bg会将其带到后台。

您可以通过在终端中键入作业来查看所有后台任务的列表。使用fg命令将后台进程移至前台。

如果后台运行多个作业,则可以键入fg,然后键入% n,其中n是作业ID。例如,要将后台作业2移到前台,命令应为:

fg %2 

同样,要杀死后台作业,请在kill命令后使用%和作业ID:

杀死%2 

3.使用nohup将命令发送到后台

Linux中的nohup命令允许管理员运行不受HUP或Hang Up信号影响的终端命令。您可以使用nohup在Linux上轻松地在后台运行命令。

以下示例在后台运行简单的Nmap端口扫描:

nohup sudo nmap—sS——top—ports = 15 www.example.com 

nohup的一个关键好处是,即使退出shell,命令也会运行。此外,它还生成执行的日志文件。在当前目录或$HOME中查找nohup.out。

4.使用系统重定向运行后台命令

您也可以使用系统重定向在Linux中运行后台命令。例如,如果你运行下面的ping命令,你的shell会在后台运行它,并立即将终端控制权交还给你:

ping—c5 www.example.com output.log 2 1>>&& 

在这里,ping命令的输出被重定向到output.log文件。如果您想丢弃结果,可以将其替换为/dev/NULL。2&>&1告诉Bash将所有错误重定向到同一文件。最后的&表示Bash在后台运行此命令。

5.使用disown将Linux命令设置为在后台运行

disown命令可以很容易地在后台运行进程。首先,您需要使用操作符将任务发送到后台。&然后,键入disown以将其从shell中分离。

Gedit&断绝关系 

否认的一个主要优点是,与nohup一样,当您关闭您的外壳或注销时,系统不会终止您的任务。

6.使用tmux在后台运行Linux命令

Tmux是一个功能强大的多路复用器,允许您在单个窗口内运行多个终端会话。对于不熟悉tmux的人来说,学习如何在Linux上使用和配置tmux是一个很好的选择。Tmux使在Linux中运行后台命令变得毫不费力。

tmux new—d 'ping—c 10 www.example.com output.log'> 

当你运行上面的tmux命令时,它会在一个单独的shell中执行ping命令,并在后台运行。您可以使用此方法在后台启动任何Linux进程或命令。

将Linux命令留在后台

在后台运行命令的能力使管理员更有效率地管理系统。您可以通过多种方式将任务发送到后台。Bash功能,如字符和Ctrl + Z是方便的,但系统将终止后台作业时,shell关闭。&

另一方面,诸如nohup和disown这样的工具即使在退出或终止shell时也会保持命令运行。

如果你长时间把程序放在后台,如果代码不正确,它们可能会变成僵尸进程。这些过程可能会大大降低系统的速度。因此,请确保每隔一段时间识别并杀死僵尸进程。