【问题标题】:How to execute command in background in unix shell?如何在 unix shell 的后台执行命令?
【发布时间】:2018-05-08 22:47:50
【问题描述】:

执行命令并立即返回,在命令完成之前不阻塞。
概念:后台执行、信号、信号处理程序、进程、异步执行 系统调用: sigset()

怎么做?

【问题讨论】:

标签: c++ linux shell unix operating-system


【解决方案1】:

运行命令:
sudo nohup {your command} &

使用 nohup 检查正在运行的命令进程 id
ps -ef | grep nohup

并在需要时终止命令

kill {process id}

【讨论】:

  • sudo 不是必需的(至少问题中没有关于root权限的内容)
【解决方案2】:

如果您不想向当前终端发送垃圾邮件,您可以将输出定向到单独的缓冲区或文件。

yourapp >> ~/tempOutput.txt &

如果你想将它输出到“无处”,你可以重定向到 null

yourapp >> /dev/null &

【讨论】:

    【解决方案3】:

    您可以将命令(或 shell 脚本)作为后台作业执行,方法是在命令后附加一个 & 符号,如下所示。

    $ ./my-script.sh &
    

    您可以使用 & 在后台执行命令(或 shell 脚本),但是这样做的问题是,如果您从会话中注销,该命令将被杀死。为避免这种情况,您应该使用 nohup,如下所示。

    例子

    $nohup ./my-shell-script.sh &
    

    $nohup ps -aux &
    

    使用 nohup 在后台执行命令后,即使在您注销后也会执行该命令。但是,您无法再次连接到同一会话以查看屏幕上发生的确切情况。为此,您应该使用screen command

    除此之外,我建议使用 tmux,您可以随时创建会话并重新附加会话。

    $tmux new -s mysessionname
    

    更多关于tmux的信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2015-06-11
      相关资源
      最近更新 更多