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

如何向justfile的recipe发送ctrl+c信号,而非终止just进程?

解决Justfile中Ctrl+C后自动停止Docker服务的问题

你的Justfile写法存在两个核心问题:

  1. 依赖语法错误:冒号后的(up-latest "backend" "-d") && (compose-stop "backend")不符合Just的依赖规则,Just会把这段内容当作单个依赖名而非执行命令序列。
  2. 未处理中断信号:默认情况下,Just收到Ctrl+C会直接终止所有进程,不会触发后续清理操作。

修正后的Justfile

webdev:
    # 先启动后端服务
    up-latest "backend" "-d"
    # 设置中断信号捕获,收到Ctrl+C时执行停止后端的操作
    trap 'compose-stop "backend"' INT
    # 启动前端开发服务
    cd website && npm run dev

up-latest target='' daemon='':
    docker compose up {{target}} {{daemon}}

compose-stop target='':
    docker compose stop {{target}}

原理说明

  • 使用shell的trap命令捕获INT信号(即Ctrl+C触发的中断信号),指定信号触发时执行compose-stop "backend"来清理后端服务。
  • 调整后,当你按下Ctrl+C时,信号会先被trap捕获并执行清理命令,同时原有npm run dev进程也会被终止,不会导致Just直接退出而跳过清理步骤。

简化写法(无需复用recipe)

如果不需要复用up-latest和compose-stop,可以直接写成单命令序列:

webdev:
    docker compose up backend -d
    trap 'docker compose stop backend' INT
    cd website && npm run dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:46:05