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


10

我试图找出如何在后台运行命令,然后将其带到前台。我厌倦了教程和答案,人们指出它很简单,只需将其追加&到命令的末尾即可使其在后台运行。它仅在单个终端窗口中工作。我想在一个终端中将命令放入后台,并在重新打开终端后将其恢复为前台

例:

$ 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

我做错了什么?任何人都可以向我解释如何在后台运行命令并将其返回到前台。

Answers:


11

您想要的方式是不可能的。

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

  • 流程组是相关流程的集合,这些流程可以一次发出所有信号。
  • 会话是过程组的集合,这些过程组要么附加到单个终端设备(称为控制终端),要么不附加到任何终端。

如果关闭终端,则会话中的所有进程都将变为死状态,除了重新初始化为init进程的那些(守护程序)。而且没有办法再给他们一个控制终端。

简而言之,在POSIX系统中,流程重用受到严格限制(守护进程是一个例外),您的要求无法得到满足。


6
从技术上讲,这是正确的答案,但是我相信遇到此问题的访问者会在提及screen / byobu / tmux的其他答案中找到“他们的解决方案”。
Programster

您是对的..但从我的角度来看,基本概念对于理解系统更好地工作以及了解您想要做什么和做错什么更为重要。谢谢你俩!
Timur Fayzrakhmanov 2014年

16
  1. 安装screen

    sudo apt-get install screen
  2. 开始screen

    screen -S session_name
  3. 根据需要执行命令。

  4. screen从终端上卸下(您的命令仍将运行):

    CTRL+ a+d

  5. 关闭终端

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

    screen -r

欲了解更多信息和额外的选项screen神情man screen


2
Screen或byobu(尤其是如果您正在运行ubuntu)。如果我是正确的话,Byobu是基于屏幕的,但是我发现它具有我认为有用且易于使用的额外功能,但这是一个见解。
Programster

谢谢你的好建议!也许这将是功能中的必要内容!)来自俄罗斯的爱情<3
Timur Fayzrakhmanov

@Programster,是的,Byobu是前任。屏幕。它同时具有byobu屏幕和byobu-tmux。
user.dz 2014年

1
我建议您tmux选择screen
gerrit 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.