如何从终端分离所有进程并仍在Docker中获取stdout?

时间:2016-04-06 21:21:00

标签: linux unix docker nohup

因此,如果您使用

之类的东西直接调用应用程序,则可以轻松分离应用程序
myapplication &

但是,如果我想拨打myapplication,然后拨打100 mychildapplication个进程,该怎么办?好吧,显然相同的命令仍然有效。我可以运行它,退出终端,并看到子进程仍在那里。

当我引入Docker容器时,它变得复杂。

如果我在Docker容器中运行docker exec -it --user myuser mycontainer sh -c 'source ~/.bashrc; cd mydir; ./myapplication myarg',子进程会立即被杀死。我可以通过附加10000000睡眠来破解它,但当然我的终端将无限期地挂起。

我也可以使用nohup,但是我没有得到标准输出。 disown不起作用,因为它没有在后台运行。

我现在的解决方法是使用jpetazzo:nsenter,但在运行命令时我不想输入密码。

注意:我拥有所有这些sudo的原因是因为exec没有源bashrc。我可以通过手动采购bashrc来破解它,它会起作用。它并没有真正影响我正在尝试做的事情。

TLDR :我希望myapplication打印到我的终端,完成执行,并在退出后让子进程保持不变,全部都在Docker容器中。这种情况发生的唯一方法是,如果不知何故我可以“nohup”与我的终端关联的所有进程。

0 个答案:

没有答案