golang 如何判断自身已被执行?

2022-05-06 02:56:43 +08:00
 raw0xff

网上暂时找到两个方法:

  1. 进程运行时检查当前目录下有没有 PID 文件,有就是重复执行。没有的话就获取当前 PID 保存在当前目录。
  2. os.Getenv 获取环境变量,为空就是首次执行,然后写入环境变量。不为空就是重复执行。

第一种方式问题是需要文件锁,而 win 不支持文件锁。 第二种不知道 win 是否支持,但是如果进程启动后被 kill 掉,那么环境变量依然存在,还会被视为重复运行。

我想实现如果首次执行就后台运行,开始监听端口,等待被调用业务函数。 如果已经执行,就显示菜单,等待输入业务指令。

请教大佬还有哪些办法可以判断自身已经被执行?

hash 自身程序?然后在进程里对比?是不是太极端了?进程里找程序名会不会太不严谨?求教!

4383 次点击
所在节点    Go 编程语言
21 条回复
Akiya
2022-05-07 19:33:34 +08:00
一般是用文件锁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/851071

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX