Tag: 进程

Bash脚本入口点(PID = 1)杀死`尾巴`subprocess只有当一个假陷阱(没有什么)在那里

我正在面对一个奇怪的行为,我的Bash脚本,我有这个Bash脚本运行与PID 1 (这是一个Docker容器的entrypoint ,如果你不熟悉Docker,我假设你可以忽略这个信息)。 当我运行下面的脚本时, SIGTERM很快终止一切,一切似乎都没有问题(请记住, sshd服务不存在!我的整个系统只启动这个只运行tail脚本,但直到现在它不是问题)。 #!/bin/bash trap "pkill sshd" SIGTERM export PATH=/usr/local/samba/bin/:/usr/local/samba/sbin/:$PATH if [ -f /usr/local/samba/etc/smb.conf ]; then exec /usr/local/samba/sbin/samba -i else tail -f /dev/null & wait ${!} fi 当我删除该trap时,问题出现了。 现在我的系统挂起,似乎是因为尾巴直到运行,并没有因某种原因而结束。 (如果你熟悉Docker,Docker会等待10秒,然后杀死容器,因为它没有响应SIGTERM ,如果你不熟悉Docker,请忽略此信息)。 #!/bin/bash export PATH=/usr/local/samba/bin/:/usr/local/samba/sbin/:$PATH if [ -f /usr/local/samba/etc/smb.conf ]; then exec /usr/local/samba/sbin/samba -i else tail -f /dev/null & wait ${!} fi […]

Docker守护进程

我发现, Docker daemon运行的Docker daemon 。 我有PID(13399)与service docker status ,但也有不同的PID。 我只创build了一个容器。

为什么我不能在mac上看到进程状态列表中的mongo PID

我正在使用docker。 所以docker是一个过程,而不是一个虚拟机。 检查这一点。 所以我试图运行“docker run –name mongo -d mongo”,它工作正常。 然后我使用“docker top mongo”检查了'PID',它返回'PID'的细节。 然后我试着'ps辅助'来查看所有进程状态。 但我不能在列表中看到mongo“PID”。 这是为什么。 我用最新的mac os使用mac。

为什么docker启动了这么多的守护进程?

为什么docker启动了这么多的守护进程? 看起来Docker把主stream程分成了几个其他的。 例如,在重新启动之后,这里是我的控制台的输出,当我键入$ htop然后是F5时: 许多docker进程http://img.gdocker.com/process/331078manydockerprocesses.png 已经有6个孩子了! 但是,我没有任何运行容器,只有2个停止的容器: $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a24f25e42c50 jupyter/datascience-notebook "tini — start-notebo" 44 hours ago Exited (0) 3 hours ago prickly_spence 728166c38396 nginx "nginx -g 'daemon off" 4 days ago Exited (0) 3 hours ago some-nginx 这是有问题的,因为很多subprocess在一段时间后开始出现,并且每个进程都使用了大约40 MB的内存,所以当你有几十个进程时,就会出现问题! 所以我的两个问题是: 我猜对了吗? docker run -d […]

为什么使用ProcessBuilder运行docker会导致挂起?

我正尝试在使用Java的ProcessBuilder的docker容器中运行一个命令。 但是,它在等待退出代码时挂起。 这是为什么? ProcessBuilder processBuilder = new ProcessBuilder(Arrays.asList("/usr/bin/docker", "run", "base", "echo", "hello")); Process process = processBuilder.start(); // … Spin off another thread to collect stdout and stderr int exitCode = process.waitFor(); // <– HANG 我可以看到,该过程吐出正确的结果标准输出。 它永远不会返回退出代码。

当使用docker run命令时,Docker容器退出(0),但使用docker start命令

我试图dockerize一个GUI应用程序,并取得了一些成功。 如果我build立一个图像的dockerfile,然后执行一个docker run –name testcontainer testimage似乎该过程开始,但突然停止。 然后用docker ps检查容器,确认没有容器正在运行。 然后我检查docker ps -a ,可以看到它退出状态码exit(0) 。 然后,如果我运行命令docker start testcontainer ,它似乎再次启动ENTRYPOINT命令,但是这次它能够继续并popupGUI。 我最好的猜测是,我认为当我运行docker run命令时,进程开始,但可能被分成后台进程,导致容器退出,因为前台进程已经结束。 虽然这可能是因为你会认为docker start命令会导致相同的结果。 我正在考虑试图强制这个过程留在前台,但不知道如何去做。 有什么build议么? 更新 :我编辑我的Dockerfile使用supervisord来pipe理GUI应用程序的开始。 现在我的docker运行命令将启动supervisor,这将启动我的GUI应用程序,它的工作原理。 有些事情要注意的是,主pipe表示: INFO spawned: myguiapp with pid 7 INFO success: myguiapp entered RUNNING state INFO: exited: myguiapp (exit status 0; expected) 主pipe和集装箱在这一点上还在运行,这似乎表明主stream程启动了一个subprocess。 由于主pipe仍在运行,我的容器保持不变,GUI应用程序显示出来,我可以使用它。 当我closuresGUI时,主pipe报告: CRIT reaped unknown pid 93 主pipe仍在运行,导致集装箱不能closures。 […]