因此,如果您使用
之类的东西直接调用应用程序,则可以轻松分离应用程序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”与我的终端关联的所有进程。