通常,在 Linux 系统命令行终端执行命令时,会等待它执行完成并退出程序。一旦这条命令执行完成,就可以继续执行下一条命令。这种方式可以被理解为通过前台执行命令,因为通常情况下可以通过终端得到命令输出的结果。

但是,前台执行命令并不适合所有应用场景,例如命令可能会执行很长的时间才会退出,等待它执行完成会浪费大量时间;还有一种情况,命令执行会同会话绑定,当会话断开后,命令就会终止执行,可是有些情况是需要该命令在会话结束后继续执行的。

这种情况下,最佳的方案就是将命令在后台执行。我们可以把命令置入后台执行后,继续执行新的命令,从而节省时间。

本文将演示如何后台执行 Linux shell 命令或脚本。

1] 执行 shell 命令时使用 & 符将命令置入后台

在需要执行的命令或脚本后面加入”&”符,系统就会自动将该命令送入后台执行

# command &

需要注意的是,这种方式并不意味着命令同我们完全分离,它只是简单的将命令送至当前 shell 的后台,一旦命令产生输出,同样会在前台显示。

图.1 通过&符将命令送至后台后前台依然会显示命令输出

这样就给用户带来极大不便,不仅不能执行其他命令,就连停止后台的命令都非常困难。

比较好的处理方法是通过重定向,将命令的标准输入和输出重定向到空设备(/dev/null)。

2] 在 & 符后加入重定向

在 & 符后面加上输出重定向,就可以有效的避免后台命令的影响:

# commnad &>/dev/null &

命令执行完成后,只会提示该命令的执行进程号,之后就不再有输出,还可以继续执行其他命令。

可以通过”jobs”命令来确定命令是否成功在后台执行了,如果想到停止后台执行的命令,则可以使用”kill”命令杀掉该命令的进程即可。加入-9参数则会立即停止该进程。

图.2 后台执行命令时重定向输出

3] 使用 nohup 命令后台执行命令

nohup 命令也是后台执行应用的一个好办法,该命令执行的后台命令甚至可以在退出 shell 后继续执行。

nohup 通过屏蔽 SIGHUP 信号来实现程序的后台执行,而这个信号则是退出 shell 终端的信号量。

使用 nohup 命令后台执行命令格式如下:

# nohup command &> /dev/null &

同样可以使用 jobs命令来查看后台的进程信息。

总体来说,Linux 系统后台执行程序的方法既简单又实用,充分掌握的话,可以达到事半功倍的效果。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注