关键词:golang
startProcess
最近用到一个创建守护进程的功能,代码如下
|
|
下面我们学习一下 golang 的封装了一系列方法用来创建一个进程。
一个简单的创建进程的小例子代码如下
|
|
os.StartProcess
StartProcess 方法如下
|
|
这个方法调用了 startProcess,我们看看这个方法
|
|
这段代码主要在处理 ProcAttr 这个结构,我们看看这个结构的样子
|
|
再回头看 startProcess 的代码。
如果 Dir 不为空,首先检查 Dir 是否合法,然后把 os.ProcAttr 的值放入到 syscall.ProcAttr 结构体内。最后调用了 syscall.StartProcess。
其实 os.StartProcess 和 syscall.StartProcess 是差不多的,只是多了一层封装,这层封装主要用来处理垃圾回收了。
接下来 syscall.StartProcess 调用了 forkexec 方法,这个处理了 wait 操作和底层的 fork 操作。