使用screen命令

到目前为止,我们介绍了在后台运行命令的默认Linux方法。
但是,还可以使用另外的软件包。
也许最受欢迎的是screen命令。

  • 运行screen命令启动一个新的“屏幕”。可选地,包括“-s”选项以提供名称。
$screen -S mycommand
  • 在新screen会话中,执行要放入后台的命令或者脚本。
$/path/to/myscript.sh
  • 按键盘上的“Ctrl + A”,然后按“D”。这将分离屏幕,然后我们可以关闭终端,屏幕将持久地关闭SSH会话等终端,退出。要查看屏幕列表,请使用此命令。
$screen -ls
There is a screen on:
	2741.mycommand	(04/08/2021 01:13:24 PM)	(Detached)
1 Socket in /run/screen/S-onitroad.
  • 要重新连接到屏幕,请使用以下命令,将下面的数字与我们自己的进程ID代替。
$screen -r 2741

在后台启动命令

现在,我们已经了解了如何将正在运行的流程放到后台,并在以后调用它。但是我们也可以选择在开始时在后台启动命令。您所需要做的就是在任何Linux命令的末尾添加一个符号。

$sleep 10000 &
[1] 1900

与前面一样,我们可以看到使用'jobs'命令列出的作业。不过,这次作业已经在运行,我们不必在后台手动启动它。

$jobs -l
[1]+  1900 Running                 sleep 10000 &

关闭终端并保持后台作业运行

我们已经在前面的示例中看到了如何使用'disown'命令来确保在关闭终端后命令继续运行。另一个选项是'nohup'命令。
nohup告诉进程忽略它接收到的任何“SIGHUP”(挂断)信号。只要当前终端关闭,SIGHUP信号就会发送到后台作业。因此,我们可以在后台有一个作业,关闭终端,仍然可以看到它在后台运行。

例如:

$nohup sleep 10000 &
[1] 1908
nohup: ignoring input and appending output to 'nohup.out'

我们已关闭终端并重新打开,然后运行以下命令,显示命令仍在运行。

$ps aux | grep sleep
linuxco+    1908  0.0  0.0   8084   524 ?        S    13:05   0:00 sleep 10000

将运行命令放入后台

执行想要长时间继续运行的命令时,问题是我们当前的终端将专用于命令。
我们无法继续使用终端,并且我们也无法关闭它,因为这将结束当前正在运行的命令。

如果我们有命令运行,并且需要将其放入后台释放终端,则可以按键盘上的“Ctrl + Z”以停止此过程。

例如:

$sleep 10000
^Z
[1]+  Stopped                 sleep 10000

要在后台查看作业列表,请使用'jobs'命令。

$jobs -l
[1]+  1650 Stopped                 sleep 10000

要使作业返回前台,我们可以使用'fg'命令。

$fg

如果有多个停止的作业,则需要使用百分号并指定作业ID,以便将相应的作业带回前台。

$fg %1

现在我们可以把进程放到后台,以后需要时再把它们带回来。但是如果我们想让命令在后台继续执行呢?
为此,我们可以使用'bg'命令,后跟一个符号和作业ID。以下命令将使停止的作业恢复,同时将其保留在后台。

$bg %1
[1]+ sleep 10000 &

现在我们可以看到这个过程仍在后台,但它显示了“运行”而不是“停止”的状态。

$jobs -l
[1]+  1650 Running                 sleep 10000 &

仍然有一件事要记住。
我们无法关闭当前的终端,或者这些后台作业将关闭。
如果我们需要关闭终端,并且不希望这些命令停止,那么我们需要“disown”作业。
如果在后台中只有一个作业,则以下命令将有效:

$disown

如果我们有多个,那么我们需要指定作业ID。

$disown %1

执行“jobs”命令时,我们将不再在工作表中看到作业。
现在关闭终端安全,命令将继续运行。

$jobs -l

您仍然可以使用ps命令监视正在运行的命令。

$ps aux | grep sleep
linuxco+    1650  0.0  0.0   8084   524 pts/0    S    12:27   0:00 sleep 10000

如果要停止命令运行,则可以使用kill命令并指定进程ID。

$kill 1650
如何在Linux上后台运行命令

如果需要释放终端或者断开与SSH会话的连接,在Linux系统的后台运行命令或者进程将成为一项常见任务。
对于长时间运行的命令尤其如此,这些命令用于侦听事件或者完成其冗长的任务。
在Linux上,我们有一些在后台运行命令的选项。
在本教程中,我们将介绍几种不同的方法,并通过示例向您展示如何使用它们。

日期:2020-07-07 20:56:32 来源:oir作者:oir