Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何从终端分离所有进程,并且仍然在Docker中获得标准输出?_Linux_Unix_Docker_Nohup - Fatal编程技术网

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睡眠来破解它,但当然我的终端将无限期地挂起

我也可以使用nohup
nohup
,但是我没有得到标准输出
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
内容有关!?