数码产品

如何在后台运行Linux命令或者脚本

在 Linux 终端上执行命令的通常风格是简单地运行它并等待它正常退出。命令退出后,可以继续连续执行其他命令。这就是所谓的在前台运行命令。正如这个词所暗示的那样,您可以在终端上直观地看到命令的输出。

但是,在前台运行命令可能会带来一系列挑战。该命令可能需要很长时间才能退出,导致您浪费宝贵的时间,不能执行其它命令,只能等到该命令执行结束,这种就类似那种串行工作一样。这个时候如果想再执行其它命令,其实也可以在重新建立一个新的会话窗口来执行其它命令操作。

在这种情况下,在后台运行命令是您最好的选择。您可以在前台并发执行其他命令时将命令发送到后台。这提高了在终端上工作的效率,并节省了您的时间。

下面就来看一看Linux命令如何再后台运行的。

1,运行命令或脚本在后台使用&符合

要在后台运行命令或脚本,请在末尾使用 & 符号 (&) 将其终止,如下所示。

[root@localhost sharplee]#command &

注意:以 & 符号结束命令不会将命令与您分离。它只是将其发送到您正在使用的当前会话shell的后台,该命令仍会持续输出将输出打印到STDOUT或STDERR,这也会阻止您在终端上执行其他命令。

[root@localhost sharplee]# ping www.baidu.com &

从上图可以看出通过此种方式后台运行,是在后台运行了,但是输出还是显示在当前会话的shell中,执行后面的命令都看不到,如何解决呢,这时候就只能通过ps -a 查看进程id,通过kill -9 进程id来终止。或者再新连接一个会话窗口,从而通过ps -a,查看运行的进程,通过kill 来终止。

2,运行命令和脚本在后台使用重定向/dev/null

下面来看第二种方式运行命令或脚本在后台,将要运行的命令或脚本重定向到/dev/null,最后在加上一个&符号。命令如下

[root@localhost backdir]# commond &>/dev/null &

下面是具体操作的命令,运行ping www.baidu.com 重定向到/dev/null,最后在加上一个&符号。命令如下

[root@localhost backdir]# ping www.baidu.com &>/dev/null &

 接下来我们可以通过jobs命令来查看后台运行的命令或脚本,想要终止后台执行的命令,通过jobs查看出后台执行的进程id,通过kill -9 进程id进行杀掉后台运行的进程。

[root@localhost sharplee]# jobs -l

3,运行命令和脚本在后台使用nohup

在后台运行命令的另一种方法是使用 nohup 命令。nohup 命令(简称为"不挂起")是一个命令,即使在退出 shell 后也能保持进程运行。它通过阻止进程接收SIGHUP(信号挂起)信号来实现这一点,该信号通常在进程退出终端时发送到进程。命令如下

[root@localhost backdir]# nohup command &>/dev/null &
or
[root@localhost backdir]# nohup shell-script.sh &>/dev/null &

下面是具体操作的命令,运行ping 网址的nohup命令。命令如下

[root@localhost backdir]# nohup ping www.baidu.com &>/dev/null &

 接下来我们可以通过jobs命令来查看后台运行的命令或脚本,想要终止后台执行的命令,通过jobs查看出后台执行的进程id,通过kill -9 进程id进行杀掉后台运行的进程。

[root@localhost sharplee]# jobs -l

 

总结:通常上面三种方式的学习,后台运行命令选用最后一个nohup命令,因为最后一个命令是在前两个基础之上的增强。

 

posted @ 2022-03-09 23:53  Hackerman  阅读(1804)  评论(0编辑  收藏  举报
数码产品