• 如何在后台运行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命令,因为最后一个命令是在前两个基础之上的增强。

  • 相关阅读:
    极光推送消息——Alias别称方式(Andirod)
    引用极光jar包之后出现控制台日志打印不出来的问题。解决!
    极光推送消息——RegistrationID方式
    Educational Codeforces Round 79 D
    解决报错:ERROR 1005 (HY000): Can't create table 'market.orders' (errno: 150)
    ansible笔记(13):变量(二)
    ansible笔记(12):变量(一)
    zabbix4.2配置邮件+脚本报警:以QQ邮箱为例
    解决mailx发邮件报错:esmtp-server: 504 5.7.4 Unrecognized authentication type [HK2PR02CA0167.apcprd02.prod.outlook.com] "/root/dead.letter" 11/302 . . . message not sent.
    ansible笔记(11):tags的用法
  • 原文地址:https://www.cnblogs.com/Hackerman/p/15987719.html
Copyright © 2020-2023  润新知