修复 main_ctx_init 在特殊情况下误判 oldpid 运行 #722
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
在某些特殊条件下存在 上一次进程意外结束导致没有删除pid文件,并且系统重启下次使用时历史残留的pid文件恰好是其他运行中的进程从而导致误判运行中。
Windows我采用的利用被打开占用中的文件无法remove成功特性规避了此类现象。
Unix我采用的利用文件写锁进程互斥特性规避了此类现象。
同时修复了Windows单纯OpenProcess判断进程结束存在误判现象,变更为GetExitCodeProcess + STILL_ACTIVE解决。
另外支持了下 main_ctx_init 自定义设置 run_dir
因为不是所有程序制作的安装包默认所在运行路径都具备写入权限,Windows通常是SHGetKnownFolderPath获取用户AppData目录,Linux则是getpwuid_r获取的用户家目录,所以支持调用main_ctx_init前自定义设置run_dir很重要。