# task-1932: 카카오톡 정제 실시간 프로세스 모니터링 + Kill 기능

## 배경
정제 subprocess가 백그라운드에서 실행되는데, 프론트엔드에서 실제 프로세스 생존/사망 여부를 모름.
프로세스가 죽어도 status가 "running"으로 남거나, 살아있는데 "cancelled"로 오판됨.
kill은 서버 터미널에서만 가능하여 제이회장님이 직접 제어 불가.

## 구현 항목

### 1. 실시간 프로세스 상태 표시 (백엔드)
- 파일: `dashboard/routes_post.py` (handle_get_wiki_refine_status 또는 관련 GET 핸들러)
- `/api/wiki/refine/status` 응답에 실제 PID 생존 확인 추가
  - lock 파일에서 PID 읽기 → `os.kill(pid, 0)`으로 alive 체크
  - 응답에 `"pid": 12345, "pid_alive": true/false` 필드 추가
- **좀비 감지**: status가 "running"인데 PID가 죽어있으면 → 자동으로 status를 "failed"로 변경
  - "프로세스 비정상 종료" 메시지 포함
  - 이러면 현재 "cancelled" 오판 문제도 해결됨

### 2. 폴링 주기 3초 (프론트엔드)
- 파일: `dashboard/components/InsuWikiView.js`
- 현재 폴링 주기(setInterval 또는 setTimeout) → **3초(3000ms)**로 변경
- running 상태일 때만 3초. idle 상태면 폴링 중지 또는 10초로 느리게.

### 3. Kill 버튼 (프론트엔드 + 백엔드)
- 백엔드: `POST /api/wiki/refine/kill` 엔드포인트 추가
  - lock 파일에서 PID 읽기
  - `os.kill(pid, signal.SIGTERM)` 실행
  - status를 "cancelled"로 변경 + "사용자가 중지함" 메시지
  - 안전장치: lock 파일의 PID만 kill 가능 (임의 PID kill 방지)
  - running 상태가 아니면 거부 (400)
- 프론트엔드: running 상태에서 **빨간색 "⏹ 중지" 버튼** 표시
  - 클릭 시 확인 다이얼로그 → POST /api/wiki/refine/kill 호출
  - kill 성공 후 상태 새로고침

### 4. UI 표시 개선
- running 상태:
  ```
  [정제 진행중] ████████░░░░ 35%  |  PID: 12345 (alive)  |  [⏹ 중지]
  스레드 처리 중... (42/149)
  ```
- PID dead 감지:
  ```
  [오류] 프로세스 비정상 종료  |  PID: 12345 (dead)  |  [✕ 닫기] [🔄 이어서 정제]
  ```

## 검증 시나리오
1. 정제 시작 → UI에 PID 번호 + "alive" 표시 확인
2. 진행률이 3초마다 업데이트되는지 확인
3. "중지" 버튼 클릭 → 프로세스 실제 종료 + status "cancelled" 확인
4. 프로세스가 비정상 종료된 경우 → "failed" 자동 감지 확인
5. idle 상태에서 중지 버튼 미표시 확인

## 프로젝트
- insuwiki

## 레벨
- critical
