记一次go run main.go kill 问题

问题描述:

写了个脚本在执行,如下:

package main

import (
    "fmt"
    "io"
    "os"
    "time"
)

func main() {
    f, err := os.OpenFile("test.txt", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()
    for {
        time.Sleep(time.Second)
        _, err := io.WriteString(f, "1111")
        if err != nil {
            fmt.Printf("err %v", err)
        }
    }
}

向一个文件写入数据。用go run main.go &


image.png

此时我们ps -ef | grep go 查看有俩个进程在跑,12888的父进程是12867
也就是我们刚go run main.go返回的那个进程id


image.png

所以当我们kill 12867 的时候,会发现程序还在执行,数据还在写入test.txt
此时12888的父进程是1,程序依旧再执行,刚kill的其实只是go run的命令,

所以俩个进程都要kill 才行

  • go run不会在当前目录生成任何[可执行文件],可执行文件被放在临时文件中被执行,所以有个/tmp/go-build 的进程
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容