Go的第18课——OS模块对进程的操作。
中间歇了一天主要是为ICPC做准备,看ranklist本来感觉能铜,结果打铁,麻了。。
OS模块对进程的操作
获取当前进程pid和父进程pid。
1 2
| os.Getpid(); os.Getppid();
|
创建一个进程并为进程设置一个属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package main
import ( "fmt" "os" )
func main() { fmt.Println(os.Getpid()) fmt.Println(os.Getppid()) attr := &os.ProcAttr{ Dir: "", Env: os.Environ(), Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, Sys: nil, } pid, _ := os.StartProcess("C:\\Windows\\System32\\notepad.exe", []string{"C:\\Windows\\System32\\notepad.exe", "./1.txt"}, attr) fmt.Printf("pid:%d\n", pid) }
|
通过 pid 寻找进程:
返回一个进程结构。
就用上面那个例程接下来去使用。
给进程发送信号
等待进程结束
然后写一个这样的例程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package main
import ( "fmt" "os" "time" )
func main() { fmt.Println(os.Getpid()) fmt.Println(os.Getppid()) attr := &os.ProcAttr{ Dir: "", Env: os.Environ(), Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, Sys: nil, } p, _ := os.StartProcess("C:\\Windows\\System32\\notepad.exe", []string{"C:\\Windows\\System32\\notepad.exe", "./1.txt"}, attr) fmt.Printf("pid:%d\n", p) q, _ := os.FindProcess(p.Pid) time.AfterFunc(time.Second*1, func() { q.Signal(os.Kill) }) ps, _ := q.Wait() fmt.Println(ps.String()) }
|
实现一个打开本目录下的 1.txt
文件,休眠等待一秒然后关闭。
os包和环境相关的方法
获得全部环境变量:
获取某个环境变量
1
| GOPATH := os.Getenv("GOPATH")
|
设置环境变量
1
| os.Setenv("envname", "envvalue")
|
查找环境变量:
测试例程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| package main
import ( "fmt" "os" )
func main() { _ = os.Environ() GOPATH := os.Getenv("GOPATH") fmt.Println(GOPATH) os.Setenv("env", "env1") key, value := os.LookupEnv("env") fmt.Printf("%v %v\n", key, value) }
|
这里估计是自己设置了其它的 GOPATH,因为之前包的一些问题。
今天精力欠佳,明天回家多学点!!