You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python向iTerm2会话中正在运行的进程发送SIGINT信号?

iTerm2 Python API发送SIGINT信号实现服务重启方案

iTerm2 Python API无需额外调用其他工具,直接使用你已掌握的async_send_text方法即可实现SIGINT信号发送,核心原理是终端下Ctrl+C触发SIGINT的本质是传输ASCII控制字符\x03,直接发送该字符即可终止会话前台运行的进程。

基础实现(适配90%以上场景)

完整的服务重启流程如下:

  • 向目标会话发送\x03终止前台运行的服务进程
  • 添加短延时等待进程完全释放资源
  • 发送重启命令加换行符\n触发执行

示例代码:

import asyncio
import iterm2

async def restart_service(session, restart_cmd):
    # 发送Ctrl+C对应控制字符,触发SIGINT
    await session.async_send_text("\x03")
    # 等待100ms,可根据服务实际退出速度调整
    await asyncio.sleep(0.1)
    # 发送重启命令并执行
    await session.async_send_text(f"{restart_cmd}\n")

async def main(connection):
    # 替换为你自己的会话获取逻辑,以下为获取当前选中会话示例
    app = await iterm2.async_get_app(connection)
    target_session = app.current_terminal_window.current_tab.current_session
    # 替换为对应服务的重启命令
    await restart_service(target_session, "python3 app.py")

if __name__ == "__main__":
    iterm2.run_until_complete(main)

特殊场景适配

如果服务运行在后台、或者会话内存在多进程的情况,可以通过获取会话前台进程PID,调用Python标准库发信号:

import os
import signal

# 获取当前会话的前台进程PID
pid = await target_session.async_get_pid()
# 发送SIGINT信号
os.kill(pid, signal.SIGINT)

需确保运行Python脚本的用户与进程所属用户一致,避免权限不足导致发送失败。

内容的提问来源于stack exchange,提问作者user6689821

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:09:05