Linux 如何从终端分离所有进程,并且仍然在Docker中获得标准输出?
因此,如果您直接使用以下方法调用应用程序,则很容易分离应用程序Linux 如何从终端分离所有进程,并且仍然在Docker中获得标准输出?,linux,unix,docker,nohup,Linux,Unix,Docker,Nohup,因此,如果您直接使用以下方法调用应用程序,则很容易分离应用程序 myapplication & 但是,如果我想调用myapplication,然后派生出100个mychildapplication进程,该怎么办?显然,同样的命令仍然有效。我可以运行它,退出终端,并看到子进程仍然存在 当我引入Docker容器时,它变得复杂了 如果我运行docker exec-it--user myuser mycontainer sh-c'source~/.bashrc;cd mydir/myappli
myapplication &
但是,如果我想调用myapplication
,然后派生出100个mychildapplication
进程,该怎么办?显然,同样的命令仍然有效。我可以运行它,退出终端,并看到子进程仍然存在
当我引入Docker容器时,它变得复杂了
如果我运行docker exec-it--user myuser mycontainer sh-c'source~/.bashrc;cd mydir/myapplication myarg'
在Docker容器中,子进程会立即终止。我可以通过附加一个10000000睡眠来破解它,但当然我的终端将无限期地挂起
我也可以使用nohupnohup
,但是我没有得到标准输出disown
不工作,因为它没有在后台运行
我现在的解决方法是使用jpetazzo:nsenter,但我不想在运行命令时键入密码
注意:我之所以有这些sudo的东西是因为exec没有源代码bashrc。我可以通过手动寻找bashrc来破解它,它会工作的。这并没有真正影响到我要做的事情
TLDR:我希望
myapplication
打印到我的终端,完成执行,并让子进程在我退出后保留在Docker容器中。唯一可能发生这种情况的方法是,如果我能以某种方式“nohup”与我的终端关联的所有进程。您是否尝试过-d,--detach
?“分离”也会执行相同的操作,只是它会像ctrl-z一样将其置于背景中。还是会被杀我还在想你为什么要这么做。您不能将/myapplication myarg
作为Dockerfile中的入口点运行吗?@bferreira容器中有我要运行的相互依赖的二进制文件。二进制文件还包含各种参数,需要正确设置环境,以获取bashrc;cd mydir/myapp.sh'
进程未被终止。当我进入容器docker exec-it--user myuser mycontainer bash
给出ps
时,它显示我的进程仍在运行myuser+124 0.0 0 0.0 11636 1376?S+16:39 0:00/bin/bash./myapp.sh
。问题可能与/myapplication
内容有关!?