kiro-process-manager


Namekiro-process-manager JSON
Version 1.1.2 PyPI version JSON
download
home_pagehttps://github.com/Kevin589981/process-manager-tool
Summary非阻塞后台进程管理工具,解决 Kiro IDE 中服务启动阻塞问题
upload_time2025-08-16 08:36:24
maintainerNone
docs_urlNone
authorKiro Process Manager Contributors
requires_python>=3.7
licenseNone
keywords kiro ide process manager background service uvicorn fastapi
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Kiro Process Manager

[![PyPI version](https://badge.fury.io/py/kiro-process-manager.svg)](https://badge.fury.io/py/kiro-process-manager)
[![Python Support](https://img.shields.io/pypi/pyversions/kiro-process-manager.svg)](https://pypi.org/project/kiro-process-manager/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

非阻塞后台进程管理工具,专为解决 Kiro IDE 中启动长期运行服务时的阻塞问题而设计。

## 问题背景

在使用 Kiro IDE 时,当需要启动长期运行的后台服务(如 uvicorn、redis-server 等)并随后运行测试时,Kiro 会因为同步等待进程退出而无限阻塞,导致后续命令无法执行。

## 解决方案

Kiro Process Manager 提供了一个简单而有效的解决方案,可以在 Kiro 中实现非阻塞的后台服务管理。

## 安装

```bash
pip install kiro-process-manager
```

## 快速开始

### 1. 初始化 Kiro 项目(推荐)

如果你在 Kiro 项目中使用,建议先运行初始化命令:

```bash
kiro-pm init
```

这会在当前目录创建 `.kiro/steering/process-manager-tool.md` 文件,让 Kiro 自动识别这个工具。

### 2. 基本用法

```bash
# 启动后台服务
kiro-pm start myapp "uvicorn main:app --port 8000"

# 等待服务就绪
kiro-pm wait-healthy 8000

# 查看运行的进程
kiro-pm list

# 停止服务
kiro-pm stop myapp
```

### 完整工作流(解决原始问题)

在 Kiro 中执行:

```bash
kiro-pm start api "uvicorn main:app --host 0.0.0.0 --port 8000" && kiro-pm wait-healthy 8000 30 && pytest tests/integration/ && kiro-pm stop api
```

### 高级用法

```bash
# 并行运行多个服务
kiro-pm start api "uvicorn main:app --port 8000"
kiro-pm start redis "redis-server --port 6379"
kiro-pm wait-healthy 8000
kiro-pm wait-healthy 6379

# 运行测试
pytest tests/integration/

# 清理所有服务
kiro-pm cleanup
```

## 功能特性

- ✅ **非阻塞启动**: 后台服务不会阻塞后续命令
- ✅ **健康检查**: 等待端口就绪后再执行测试
- ✅ **进程管理**: 启动、停止、列表、清理功能
- ✅ **跨平台**: 支持 Windows/Linux/macOS
- ✅ **持久化**: 进程信息保存到文件,支持会话恢复
- ✅ **错误处理**: 完善的异常处理和超时机制

## 命令参考

```bash
# 初始化 Kiro 项目
kiro-pm init

# 启动进程
kiro-pm start <name> <command>

# 停止进程
kiro-pm stop <name> [--force]

# 列出所有进程
kiro-pm list

# 等待端口就绪
kiro-pm wait-healthy <port> [--timeout SECONDS] [--host HOST]

# 清理所有进程
kiro-pm cleanup
```

## 使用场景

1. **Web 应用测试**: 启动 FastAPI/Django 应用,运行集成测试
2. **微服务测试**: 同时启动多个服务,运行端到端测试
3. **数据库测试**: 启动 Redis/PostgreSQL,运行数据相关测试
4. **前端开发**: 同时启动前后端服务进行开发调试

## 技术原理

- 使用 `subprocess.Popen` 非阻塞启动进程
- 进程信息持久化到 JSON 文件
- 通过 socket 连接检查端口健康状态
- 支持优雅停止和强制终止
- 跨平台进程管理(Windows 使用 taskkill,Unix 使用 signal)

## 开发

### 本地安装

```bash
git clone https://github.com/yourusername/kiro-process-manager.git
cd kiro-process-manager
pip install -e .
```

### 运行测试

```bash
# 测试基本功能
kiro-pm start test "python -m http.server 8080"
kiro-pm wait-healthy 8080
kiro-pm list
kiro-pm stop test
```

## 贡献

欢迎提交 Issue 和 Pull Request 来改进这个解决方案。

## 许可证

MIT License

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Kevin589981/process-manager-tool",
    "name": "kiro-process-manager",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "kiro, ide, process, manager, background, service, uvicorn, fastapi",
    "author": "Kiro Process Manager Contributors",
    "author_email": "Kiro Process Manager Contributors <kevin3627713@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/14/18/459e36f984c05ce33647925cef40e54d7061cb7ff8feafb06482a245f5ac/kiro_process_manager-1.1.2.tar.gz",
    "platform": null,
    "description": "# Kiro Process Manager\r\n\r\n[![PyPI version](https://badge.fury.io/py/kiro-process-manager.svg)](https://badge.fury.io/py/kiro-process-manager)\r\n[![Python Support](https://img.shields.io/pypi/pyversions/kiro-process-manager.svg)](https://pypi.org/project/kiro-process-manager/)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n\r\n\u975e\u963b\u585e\u540e\u53f0\u8fdb\u7a0b\u7ba1\u7406\u5de5\u5177\uff0c\u4e13\u4e3a\u89e3\u51b3 Kiro IDE \u4e2d\u542f\u52a8\u957f\u671f\u8fd0\u884c\u670d\u52a1\u65f6\u7684\u963b\u585e\u95ee\u9898\u800c\u8bbe\u8ba1\u3002\r\n\r\n## \u95ee\u9898\u80cc\u666f\r\n\r\n\u5728\u4f7f\u7528 Kiro IDE \u65f6\uff0c\u5f53\u9700\u8981\u542f\u52a8\u957f\u671f\u8fd0\u884c\u7684\u540e\u53f0\u670d\u52a1\uff08\u5982 uvicorn\u3001redis-server \u7b49\uff09\u5e76\u968f\u540e\u8fd0\u884c\u6d4b\u8bd5\u65f6\uff0cKiro \u4f1a\u56e0\u4e3a\u540c\u6b65\u7b49\u5f85\u8fdb\u7a0b\u9000\u51fa\u800c\u65e0\u9650\u963b\u585e\uff0c\u5bfc\u81f4\u540e\u7eed\u547d\u4ee4\u65e0\u6cd5\u6267\u884c\u3002\r\n\r\n## \u89e3\u51b3\u65b9\u6848\r\n\r\nKiro Process Manager \u63d0\u4f9b\u4e86\u4e00\u4e2a\u7b80\u5355\u800c\u6709\u6548\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u53ef\u4ee5\u5728 Kiro \u4e2d\u5b9e\u73b0\u975e\u963b\u585e\u7684\u540e\u53f0\u670d\u52a1\u7ba1\u7406\u3002\r\n\r\n## \u5b89\u88c5\r\n\r\n```bash\r\npip install kiro-process-manager\r\n```\r\n\r\n## \u5feb\u901f\u5f00\u59cb\r\n\r\n### 1. \u521d\u59cb\u5316 Kiro \u9879\u76ee\uff08\u63a8\u8350\uff09\r\n\r\n\u5982\u679c\u4f60\u5728 Kiro \u9879\u76ee\u4e2d\u4f7f\u7528\uff0c\u5efa\u8bae\u5148\u8fd0\u884c\u521d\u59cb\u5316\u547d\u4ee4\uff1a\r\n\r\n```bash\r\nkiro-pm init\r\n```\r\n\r\n\u8fd9\u4f1a\u5728\u5f53\u524d\u76ee\u5f55\u521b\u5efa `.kiro/steering/process-manager-tool.md` \u6587\u4ef6\uff0c\u8ba9 Kiro \u81ea\u52a8\u8bc6\u522b\u8fd9\u4e2a\u5de5\u5177\u3002\r\n\r\n### 2. \u57fa\u672c\u7528\u6cd5\r\n\r\n```bash\r\n# \u542f\u52a8\u540e\u53f0\u670d\u52a1\r\nkiro-pm start myapp \"uvicorn main:app --port 8000\"\r\n\r\n# \u7b49\u5f85\u670d\u52a1\u5c31\u7eea\r\nkiro-pm wait-healthy 8000\r\n\r\n# \u67e5\u770b\u8fd0\u884c\u7684\u8fdb\u7a0b\r\nkiro-pm list\r\n\r\n# \u505c\u6b62\u670d\u52a1\r\nkiro-pm stop myapp\r\n```\r\n\r\n### \u5b8c\u6574\u5de5\u4f5c\u6d41\uff08\u89e3\u51b3\u539f\u59cb\u95ee\u9898\uff09\r\n\r\n\u5728 Kiro \u4e2d\u6267\u884c\uff1a\r\n\r\n```bash\r\nkiro-pm start api \"uvicorn main:app --host 0.0.0.0 --port 8000\" && kiro-pm wait-healthy 8000 30 && pytest tests/integration/ && kiro-pm stop api\r\n```\r\n\r\n### \u9ad8\u7ea7\u7528\u6cd5\r\n\r\n```bash\r\n# \u5e76\u884c\u8fd0\u884c\u591a\u4e2a\u670d\u52a1\r\nkiro-pm start api \"uvicorn main:app --port 8000\"\r\nkiro-pm start redis \"redis-server --port 6379\"\r\nkiro-pm wait-healthy 8000\r\nkiro-pm wait-healthy 6379\r\n\r\n# \u8fd0\u884c\u6d4b\u8bd5\r\npytest tests/integration/\r\n\r\n# \u6e05\u7406\u6240\u6709\u670d\u52a1\r\nkiro-pm cleanup\r\n```\r\n\r\n## \u529f\u80fd\u7279\u6027\r\n\r\n- \u2705 **\u975e\u963b\u585e\u542f\u52a8**: \u540e\u53f0\u670d\u52a1\u4e0d\u4f1a\u963b\u585e\u540e\u7eed\u547d\u4ee4\r\n- \u2705 **\u5065\u5eb7\u68c0\u67e5**: \u7b49\u5f85\u7aef\u53e3\u5c31\u7eea\u540e\u518d\u6267\u884c\u6d4b\u8bd5\r\n- \u2705 **\u8fdb\u7a0b\u7ba1\u7406**: \u542f\u52a8\u3001\u505c\u6b62\u3001\u5217\u8868\u3001\u6e05\u7406\u529f\u80fd\r\n- \u2705 **\u8de8\u5e73\u53f0**: \u652f\u6301 Windows/Linux/macOS\r\n- \u2705 **\u6301\u4e45\u5316**: \u8fdb\u7a0b\u4fe1\u606f\u4fdd\u5b58\u5230\u6587\u4ef6\uff0c\u652f\u6301\u4f1a\u8bdd\u6062\u590d\r\n- \u2705 **\u9519\u8bef\u5904\u7406**: \u5b8c\u5584\u7684\u5f02\u5e38\u5904\u7406\u548c\u8d85\u65f6\u673a\u5236\r\n\r\n## \u547d\u4ee4\u53c2\u8003\r\n\r\n```bash\r\n# \u521d\u59cb\u5316 Kiro \u9879\u76ee\r\nkiro-pm init\r\n\r\n# \u542f\u52a8\u8fdb\u7a0b\r\nkiro-pm start <name> <command>\r\n\r\n# \u505c\u6b62\u8fdb\u7a0b\r\nkiro-pm stop <name> [--force]\r\n\r\n# \u5217\u51fa\u6240\u6709\u8fdb\u7a0b\r\nkiro-pm list\r\n\r\n# \u7b49\u5f85\u7aef\u53e3\u5c31\u7eea\r\nkiro-pm wait-healthy <port> [--timeout SECONDS] [--host HOST]\r\n\r\n# \u6e05\u7406\u6240\u6709\u8fdb\u7a0b\r\nkiro-pm cleanup\r\n```\r\n\r\n## \u4f7f\u7528\u573a\u666f\r\n\r\n1. **Web \u5e94\u7528\u6d4b\u8bd5**: \u542f\u52a8 FastAPI/Django \u5e94\u7528\uff0c\u8fd0\u884c\u96c6\u6210\u6d4b\u8bd5\r\n2. **\u5fae\u670d\u52a1\u6d4b\u8bd5**: \u540c\u65f6\u542f\u52a8\u591a\u4e2a\u670d\u52a1\uff0c\u8fd0\u884c\u7aef\u5230\u7aef\u6d4b\u8bd5\r\n3. **\u6570\u636e\u5e93\u6d4b\u8bd5**: \u542f\u52a8 Redis/PostgreSQL\uff0c\u8fd0\u884c\u6570\u636e\u76f8\u5173\u6d4b\u8bd5\r\n4. **\u524d\u7aef\u5f00\u53d1**: \u540c\u65f6\u542f\u52a8\u524d\u540e\u7aef\u670d\u52a1\u8fdb\u884c\u5f00\u53d1\u8c03\u8bd5\r\n\r\n## \u6280\u672f\u539f\u7406\r\n\r\n- \u4f7f\u7528 `subprocess.Popen` \u975e\u963b\u585e\u542f\u52a8\u8fdb\u7a0b\r\n- \u8fdb\u7a0b\u4fe1\u606f\u6301\u4e45\u5316\u5230 JSON \u6587\u4ef6\r\n- \u901a\u8fc7 socket \u8fde\u63a5\u68c0\u67e5\u7aef\u53e3\u5065\u5eb7\u72b6\u6001\r\n- \u652f\u6301\u4f18\u96c5\u505c\u6b62\u548c\u5f3a\u5236\u7ec8\u6b62\r\n- \u8de8\u5e73\u53f0\u8fdb\u7a0b\u7ba1\u7406\uff08Windows \u4f7f\u7528 taskkill\uff0cUnix \u4f7f\u7528 signal\uff09\r\n\r\n## \u5f00\u53d1\r\n\r\n### \u672c\u5730\u5b89\u88c5\r\n\r\n```bash\r\ngit clone https://github.com/yourusername/kiro-process-manager.git\r\ncd kiro-process-manager\r\npip install -e .\r\n```\r\n\r\n### \u8fd0\u884c\u6d4b\u8bd5\r\n\r\n```bash\r\n# \u6d4b\u8bd5\u57fa\u672c\u529f\u80fd\r\nkiro-pm start test \"python -m http.server 8080\"\r\nkiro-pm wait-healthy 8080\r\nkiro-pm list\r\nkiro-pm stop test\r\n```\r\n\r\n## \u8d21\u732e\r\n\r\n\u6b22\u8fce\u63d0\u4ea4 Issue \u548c Pull Request \u6765\u6539\u8fdb\u8fd9\u4e2a\u89e3\u51b3\u65b9\u6848\u3002\r\n\r\n## \u8bb8\u53ef\u8bc1\r\n\r\nMIT License\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "\u975e\u963b\u585e\u540e\u53f0\u8fdb\u7a0b\u7ba1\u7406\u5de5\u5177\uff0c\u89e3\u51b3 Kiro IDE \u4e2d\u670d\u52a1\u542f\u52a8\u963b\u585e\u95ee\u9898",
    "version": "1.1.2",
    "project_urls": {
        "Homepage": "https://github.com/Kevin589981/process-manager-tool",
        "Issues": "https://github.com/Kevin589981/process-manager-tool/issues",
        "Repository": "https://github.com/Kevin589981/process-manager-tool"
    },
    "split_keywords": [
        "kiro",
        " ide",
        " process",
        " manager",
        " background",
        " service",
        " uvicorn",
        " fastapi"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "01c1830da71379bbb7b2155ad528c3ebb28a58bbfdf190b6c2cb9c82b2b7ab01",
                "md5": "3d8f36de22729c02c678065e67d4f19e",
                "sha256": "9522ed603e38867e602d7b571fa463bfc6012aa9e7092a113650e56d031e4343"
            },
            "downloads": -1,
            "filename": "kiro_process_manager-1.1.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3d8f36de22729c02c678065e67d4f19e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 8893,
            "upload_time": "2025-08-16T08:36:22",
            "upload_time_iso_8601": "2025-08-16T08:36:22.949613Z",
            "url": "https://files.pythonhosted.org/packages/01/c1/830da71379bbb7b2155ad528c3ebb28a58bbfdf190b6c2cb9c82b2b7ab01/kiro_process_manager-1.1.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1418459e36f984c05ce33647925cef40e54d7061cb7ff8feafb06482a245f5ac",
                "md5": "2212a9f4b8ad9fd3b79719f00e180359",
                "sha256": "0a7c87a56f60174c6cc7502e344f5c304a98ed734c493813605ad66d496b269c"
            },
            "downloads": -1,
            "filename": "kiro_process_manager-1.1.2.tar.gz",
            "has_sig": false,
            "md5_digest": "2212a9f4b8ad9fd3b79719f00e180359",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 7895,
            "upload_time": "2025-08-16T08:36:24",
            "upload_time_iso_8601": "2025-08-16T08:36:24.212417Z",
            "url": "https://files.pythonhosted.org/packages/14/18/459e36f984c05ce33647925cef40e54d7061cb7ff8feafb06482a245f5ac/kiro_process_manager-1.1.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-16 08:36:24",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Kevin589981",
    "github_project": "process-manager-tool",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "kiro-process-manager"
}
        
Elapsed time: 1.60402s