-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
Bug Description
环境
- OS: Windows 11
- Python: 3.12.4
- openviking 包版本: 0.2.9 (
pip show openviking)
现象
启动 openviking-server 时,在应用 lifespan 初始化阶段失败,进程退出。
堆栈摘要
openviking.utils.process_lock.acquire_data_dir_lock → _is_pid_alive → os.kill(pid, 0)
抛出:OSError: [WinError 11] 试图加载格式不正确的程序。(或英文等价信息)
复现步骤
- 在
data目录存在.openviking.pid,且其中 PID 在 Windows 上对os.kill(pid, 0)会触发上述 OSError(或先按正常流程留下锁文件后异常退出)。 - 执行:
openviking-server --config ov.conf - 观察到 Application startup failed。
期望行为
_is_pid_alive 在 PID 无效或平台行为异常时,应视为进程不存在,允许覆盖陈旧锁文件,而不是未捕获异常导致整个服务无法启动。
可能原因(供参考)
_is_pid_alive 仅捕获 ProcessLookupError / PermissionError,Windows 上部分情况下 os.kill(pid, 0) 会抛出更泛化的 OSError(如 WinError 11),未被处理。
建议修复(可选)
在 _is_pid_alive 中在保留现有异常顺序的前提下,增加对 OSError 的处理并返回 False(或等价逻辑),并注意 PermissionError 仍为 OSError 子类,处理顺序需先处理 PermissionError。
附加信息
- 删除
.openviking.pid后有时可临时恢复启动,但根因仍是 PID 探测在 Windows 上的异常类型。
错误信息
`(base) PS C:\Users\san_b.openclaw.openviking> openviking-server --config ov.conf
Loading config file: ov.conf
2026-03-21 16:22:09,467 - openviking.server.app - INFO - Bot API proxy disabled (use --with-bot to enable)
OpenViking HTTP Server is running on 127.0.0.1:1933
2026-03-21 16:22:09,546 - uvicorn.error - INFO - Started server process [29504]
2026-03-21 16:22:09,546 - uvicorn.error - INFO - Waiting for application startup.
2026-03-21 16:22:09,553 - openviking.utils.agfs_utils - INFO - [AGFSUtils] Created AGFSBindingClient (lib_path=C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\openviking\lib\libagfsbinding.dll)
time="2026-03-21T16:22:09+08:00" level=info msg="mounted serverinfofs at /serverinfo"
time="2026-03-21T16:22:09+08:00" level=info msg="[queuefs] SQLite backend initialized"
time="2026-03-21T16:22:09+08:00" level=info msg="[queuefs] Initialized with backend: sqlite"
time="2026-03-21T16:22:09+08:00" level=info msg="mounted queuefs at /queue"
time="2026-03-21T16:22:09+08:00" level=info msg="[localfs] Initialized with base path: C:\Users\san_b\.openclaw\.openviking\data\viking"
time="2026-03-21T16:22:09+08:00" level=info msg="mounted localfs at /local"
2026-03-21 16:22:09,573 - openviking.storage.queuefs.queue_manager - INFO - [QueueManager] Initialized with agfs=AGFSBindingClient, mount_point=/queue
2026-03-21 16:22:09,573 - openviking.storage.viking_vector_index_backend - INFO - VikingVectorIndexBackend facade initialized
2026-03-21 16:22:09,735 - openviking.storage.queuefs.queue_manager - INFO - Embedding queue initialized with TextEmbeddingHandler
2026-03-21 16:22:09,735 - openviking.storage.queuefs.queue_manager - INFO - Semantic queue initialized with SemanticProcessor
2026-03-21 16:22:09,882 - openviking.service.core - INFO - Initialized embedder (dim 1024, sparse False)
2026-03-21 16:22:09,887 - uvicorn.error - ERROR - Traceback (most recent call last):
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\starlette\routing.py", line 694, in lifespan
async with self.lifespan_context(app) as maybe_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\fastapi\routing.py", line 212, in merged_lifespan
async with original_context(app) as maybe_original_state:
File "C:\Users\san_b\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 210, in aenter
return await anext(self.gen)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\openviking\server\app.py", line 65, in lifespan
await service.initialize()
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\openviking\service\core.py", line 237, in initialize
acquire_data_dir_lock(self._config.storage.workspace)
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\openviking\utils\process_lock.py", line 59, in acquire_data_dir_lock
if existing_pid and existing_pid != my_pid and _is_pid_alive(existing_pid):
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\san_b\AppData\Roaming\Python\Python312\site-packages\openviking\utils\process_lock.py", line 38, in _is_pid_alive
os.kill(pid, 0)
OSError: [WinError 11] 试图加载格式不正确的程序。
2026-03-21 16:22:09,887 - uvicorn.error - ERROR - Application startup failed. Exiting.
(base) PS C:\Users\san_b.openclaw.openviking>
`
修复代码
Steps to Reproduce
null
Expected Behavior
null
Actual Behavior
null
Minimal Reproducible Example
Error Logs
OpenViking Version
0.2.9
Python Version
Python: 3.12.4
Operating System
Windows
Model Backend
None
Additional Context
No response
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
