# Daemon 指令

以 `kura`、`kura stop` 與 `kura port` 啟動、停止 KuraDB 背景 daemon 並固定其 port。

## 啟動 daemon

```bash
kura
```

Launcher 會：

1. 以 append 模式開啟 `~/.config/kuradb/daemon.log` 接收 daemon 輸出。
2. 以內部 `--daemon` argument 在新 session 啟動相同 executable，stdin 綁定至 `/dev/null`。
3. 每 100 ms 輪詢一次 `~/.config/kuradb/endpoint`，最多 10 秒。
4. 就緒時印出 endpoint；失敗時以狀態碼 1 結束並指示查看 `daemon.log`。

`--daemon` 是內部 lifecycle argument，不是一般 user command。Launcher 不會檢查是否已有 daemon 在執行，因此再次啟動前請先執行 `kura stop`。

## 設定 port

```bash
kura port set 8080
kura port clear
```

| Subcommand | 接受 | 效果 |
|---|---|---|
| `set <port>` | 1 到 65535 的 integer | 將 `port` 寫入 `config.json`，若 daemon 存活則先停止，再啟動 daemon |
| `clear` | 無 argument | 從 `config.json` 移除固定值；刻意不重新啟動，下次手動啟動時改用隨機 port |

超出範圍或非數字的 port，以及其他 subcommand，會印出用法並以狀態碼 2 結束。Port 選擇規則見 [網路設定](/zh/configuration-network)。

## 停止 daemon

```bash
kura stop
```

KuraDB 從 `runtime.uid` 讀取 PID，確認仍存活後傳送 `SIGTERM`。它會以 100 ms 間隔輪詢最多五秒；若程序仍未結束，則傳送 `SIGKILL`，最後印出 `stopped kura (PID <pid>)`。

| 條件 | 輸出 | 結束狀態碼 |
|---|---|---|
| `runtime.uid` 不存在或無法讀取 | `stop: no running daemon found` | 1 |
| 有記錄 PID 但程序未存活 | `stop: daemon not running` | 1 |
| 訊號傳送失敗 | `stop: <error>` | 1 |
