Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

run -d top退出后,ps -ef查看不到 #72

Open
Ruilkyu opened this issue May 16, 2020 · 3 comments
Open

run -d top退出后,ps -ef查看不到 #72

Ruilkyu opened this issue May 16, 2020 · 3 comments

Comments

@Ruilkyu
Copy link

Ruilkyu commented May 16, 2020

No description provided.

@HhTtLllL
Copy link

I also have this kind of problem, but there is no goo solution yet. Lokking for an answer

@HhTtLllL
Copy link

HhTtLllL commented Aug 29, 2020

终于破案了.......

以下仅是我的一些结论。希望对你能有点帮助。 如果有不对的地方,希望指正。

我也是这个问题,找了一圈没有找到相应的解释,就自己找起了原因
部分核心代码如下,其他的代码没有改变,如果有兴趣可以复现这个问题。
kernal: 4.15.0

cmd.SysProcAttr = &syscall.SysProcAttr{
Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWPID | syscall.CLONE_NEWNS |
syscall.CLONE_NEWNET | syscall.CLONE_NEWIPC | syscall.CLONE_NEWUSER,

                    UidMappings: []syscall.SysProcIDMap{{ContainerID: 0, HostID: syscall.Getuid(), Size: 1,},},
		GidMappings: []syscall.SysProcIDMap{{ContainerID: 0,HostID: syscall.Getgid(),Size: 1,},},
}

if tty {
	cmd.Stderr = os.Stderr
	cmd.Stdin = os.Stdin
}

cmd.Stdout = os.Stdout

用上面的代码运行,运行 sudo ./mydocker run -d top , 在宿主机上跑 ps -ef | grep top 是找不到 运行 top 这个进程。
开始我以为是没有执行这个命令,找了半天都感觉没有任何问题。然后是换 ls 命令试了一下,发现是有输出的。也就是说执行了这个命令。出现了一种可能, top 命令被秒退了,所以找不到这个进程。 然后就换个时间长的命令 ls -r / (第一个反应是它)....
现在用 ps -ef | grep ls 是能找到这个进程的。(因为我不知道怎样放图片, 我就全程口述。)

第二个命令是 top -b, 然后将输出重新定向到文件里。 然后运行。
现在查看这个文件的大小,它是不断的递增,也就是说 top 命令是在运行的。 或者你在用 ps -ef | grep top 。
此时也是可以查看到 top 命令了。

另外: 这些是我的疑惑。想找到原因。
我尝试了另一种方法 这个方法的关键是 cmd.Stdin = os.Stdin 代码,

进行以下操作,也是可以用 ps -ef | grep top
将这行代码 cmd.Stdin = os.Stdin, 放在 if tty {} 判断的外面。 然后先运行 sudo ./mydocker run -ti top ,然后在运行
sudo ./mydocker run -d top 。 这个时候在开启一个终端, 你使用 ps -ef | grep top 也是可以得出和书上一样的结论。

但是这个我也不知道为什么, 希望有大佬能帮忙解惑

@doc-laowu
Copy link

我的内核是3.10.0, 我也出现了这个问题,其实只需要把cmd的标准错误输入、输出啥的给他重定向都一个文件中,也就能后台运行的了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants