Skip to content

原文(日本語に翻訳)

-p(プリント)モードでCtrl+Cが機能しない問題を修正しました

原文(英語)

Fixed Ctrl+C not working in -p (print) mode

概要

Claude Codeの非インタラクティブモード(-p または --print フラグ)で実行中に、Ctrl+Cでプロセスを中断できない問題がありました。長時間かかるレスポンス生成をキャンセルしたい場合でも割り込みが効かず、プロセスを強制終了する手段がない状況でした。この修正により、プリントモード実行中もCtrl+Cで正常に処理を中断できるようになります。

基本的な使い方

プリントモードでClaude Codeを実行中、Ctrl+Cを押すことで処理を中断できるようになりました。

bash
# プリントモードで実行
claude -p "非常に長い処理が必要なプロンプト..."

# 修正後: 処理中にCtrl+Cを押すと即座に中断される
# 修正前: Ctrl+Cを押しても処理が継続してしまっていた

実践例

長時間レスポンスのキャンセル

bash
# 大量のコード解析を要求する処理
claude -p "このリポジトリ全体を解析して詳細なレポートを作成してください"

# 処理が長すぎると判断した場合
# Ctrl+C を押して即座にキャンセル
# 修正後: ^C が表示されて処理が中断される

スクリプトからの呼び出しでのキャンセル

bash
#!/bin/bash
# スクリプトからプリントモードで実行
claude -p "$prompt" &
PID=$!

# タイムアウトを設定してキャンセル
sleep 30
kill -SIGINT $PID  # Ctrl+Cと同等のシグナルを送信

# 修正後: SIGINTが正しく処理される

タイムアウト付きの実行

bash
# timeout コマンドと組み合わせて使用
timeout 60 claude -p "解析してください" || echo "タイムアウトまたはキャンセルされました"

# 修正後: 60秒経過またはCtrl+Cで処理が正しく終了する

注意点

  • 影響するモード: -p--print)フラグを使用した非インタラクティブモードのみが対象です。通常の対話型モードでは問題なく動作していました
  • シグナル処理: Ctrl+CはSIGINTシグナルを送信します。修正により、このシグナルが正しくキャプチャ・処理されるようになりました
  • 部分的なレスポンス: Ctrl+Cで中断した場合、それまでに生成されたレスポンスは出力されません
  • CI/CDパイプライン: 自動化スクリプトやCI/CDパイプラインでの利用時にタイムアウト処理が正しく機能するようになります

関連情報