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

如何停止React开发服务器后仍执行父脚本的清理步骤?

解决Ctrl+C终止开发服务器后执行清理步骤的Shell脚本方案

Bash(Linux)解决方案

在Bash中,我们可以通过trap命令捕获Ctrl+C触发的SIGINT信号,绑定自定义清理函数,确保服务器终止后清理步骤能正常执行:

#!/bin/bash

# 构建准备步骤
echo "执行构建准备操作..."
# 这里替换为你的实际准备命令,比如npm install、创建临时目录等

# 定义清理函数
cleanup() {
    echo -e "\n开始执行构建清理..."
    # 这里替换为你的实际清理命令,比如删除临时文件、清理日志等
    exit 0
}

# 捕获Ctrl+C信号,触发清理函数
trap cleanup SIGINT

# 启动React开发服务器
npx react-scripts start

# 若服务器正常退出,同样执行清理
cleanup

原理说明

trap cleanup SIGINT会告诉Shell:当接收到SIGINT信号(用户按下Ctrl+C)时,先执行cleanup函数内的逻辑,再终止脚本,避免清理步骤被直接跳过。


PowerShell解决方案

PowerShell需要通过监听键盘事件捕获Ctrl+C,绑定清理逻辑:

# 构建准备步骤
Write-Host "执行构建准备操作..."
# 这里替换为你的实际准备命令,比如npm install、创建临时目录等

# 定义清理函数
function Cleanup {
    Write-Host "`n开始执行构建清理..."
    # 这里替换为你的实际清理命令,比如删除临时文件、清理日志等
    exit 0
}

# 注册Ctrl+C事件监听
[console]::TreatControlCAsInput = $false
$keyEvent = Register-ObjectEvent -InputObject $host.ui.rawui -EventName KeyPressed -Action {
    if ($EventArgs.Key -eq 'C' -and $EventArgs.ControlKeyState -eq 'LeftCtrlPressed') {
        Cleanup
    }
}

# 启动React开发服务器
npx react-scripts start

# 注销事件监听,避免残留
Unregister-Event -SourceIdentifier $keyEvent.Name

# 服务器正常退出时执行清理
Cleanup

原理说明

通过Register-ObjectEvent监听控制台按键事件,当检测到Ctrl+C组合键时,调用Cleanup函数执行清理逻辑,确保脚本不会直接终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:26:07