我正在尝试找出如何在后台运行命令,然后稍后将其带到前台。我厌倦了教程和答案,人们说这很简单,只需附加到&
命令末尾即可让它在后台运行。它只在一个终端窗口中工作。我想在一个终端中将命令放入后台,然后在重新打开终端后将其返回到前台
例子:
$ 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
安装
screen
:sudo apt-get install screen
开始
screen
:screen -S session_name
执行您需要的命令。
脱离
screen
终端(您的命令仍在运行):按CTRL++ad
关闭终端
打开另一个终端并重新连接最后一个
screen
会话:screen -r
欲了解更多信息和额外选项,请screen
查看man screen
。
答案2
按照你所希望的方式,这是不可能的。
让我们回顾一下一些基本概念:
- 进程组是可同时发出信号的相关进程的集合。
- 会话是进程组的集合,这些进程组要么连接到单个终端设备(称为控制终端),要么不连接到任何终端。
如果您关闭了终端,会话中的所有进程都将停止,除了那些重新归属于 init 进程的进程(守护进程)。并且无法再次为它们提供控制终端。
总之,在 POSIX 系统中,进程重定受到严格限制(守护进程除外),无法满足您的要求。
答案3
您是否尝试过:byobu
或tmux
哪些是终端多路复用器。不是您正在寻找的确切内容,但它具有类似的行为。
byobu-screen
然后运行命令来分离:
byobu-screen -d
恢复:
byobu-screen -r