如何在后台设置命令,关闭终端并将其返回到 fg?

如何在后台设置命令,关闭终端并将其返回到 fg?

我正在尝试找出如何在后台运行命令,然后稍后将其带到前台。我厌倦了教程和答案,人们说这很简单,只需附加到&命令末尾即可让它在后台运行。它只在一个终端窗口中工作。我想在一个终端中将命令放入后台,然后在重新打开终端后将其返回到前台

例子:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

当然,关闭终端后就找不到任何工作了。

下一个例子:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

我做错了什么?有人能解释一下如何在后台运行命令并将其返回到前台吗?

答案1

  1. 安装screen

    sudo apt-get install screen
    
  2. 开始screen

    screen -S session_name
    
  3. 执行您需要的命令。

  4. 脱离screen终端(您的命令仍在运行):

    CTRL++ad

  5. 关闭终端

  6. 打开另一个终端并重新连接最后一个screen会话:

    screen -r
    

欲了解更多信息和额外选项,请screen查看man screen

答案2

按照你所希望的方式,这是不可能的。

让我们回顾一下一些基本概念:

  • 进程组是可同时发出信号的相关进程的集合。
  • 会话是进程组的集合,这些进程组要么连接到单个终端设备(称为控制终端),要么不连接到任何终端。

如果您关闭了终端,会话中的所有进程都将停止,除了那些重新归属于 init 进程的进程(守护进程)。并且无法再次为它们提供控制终端。

总之,在 POSIX 系统中,进程重定受到严格限制(守护进程除外),无法满足您的要求。

答案3

您是否尝试过:byobutmux哪些是终端多路复用器。不是您正在寻找的确切内容,但它具有类似的行为。

byobu-screen

然后运行命令来分离:

byobu-screen -d

恢复:

byobu-screen -r

https://help.ubuntu.com/community/Screen

相关内容