也不是半途而废,主要是学到这里时由于编程环境的差异和个人知识水平的限制,本地代码和书上代码执行结果出现了非常大的差异,同时这一章牵涉到非常多的Linux系统调用和基础知识,而我对它们又不太熟悉,所以对本书的学习只能暂时放弃,先去补习相关的基础知识。
5.1
只需要设置一个参数即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
var runCommand = cli.Command{ Flags: []cli.Flag{ cli.BoolFlag{ Name: "d", Usage: "detach container", }, Action: func(ctx *cli.Context) error { createTty := ctx.Bool("ti") detach := ctx.Bool("d")
if createTty && detach { return fmt.Errorf("ti and d paramter can not both provided") } }
|
然后做一个判断,是否需要等待
1 2 3 4 5 6 7 8 9
| func Run(tty bool, cmdArr []string, res *subsystems.ResourceConfig, volumn string) {
if tty { if err := parent.Wait(); err != nil { log.Fatal(err) } }
}
|
快速查看进程所在的进程树。从祖先到自己
1
| ps | awk '$4=="top" {print $1}' | xargs pstree -spa
|
5.1中所说的有PID1接管是在完全的命令行界面,如果是图形化界面则会变成如下的进程树
1 2 3 4 5
| systemd,1 splash └─lightdm,1035 └─lightdm,1479 --session-child 12 19 └─upstart,2053 --user └─top,10615
|
lightdm 是Linux和图形化界面有关的一个进程