# 機能設計書 92-プロセスPID取得

## 概要

本ドキュメントは、libuvにおけるプロセスPID取得機能（uv_process_get_pid）の設計仕様を記述する。uv_spawn()で生成した子プロセスのプロセスIDを取得するアクセサ関数である。

### 本機能の処理概要

**業務上の目的・背景**：子プロセスを生成した後、そのプロセスIDを取得する必要がある場面は多い。ログ出力、プロセス監視、外部ツールとの連携、シグナル送信（uv_kill()）などでPIDが必要とされる。uv_process_get_pid()は、uv_process_t構造体の内部フィールドに直接アクセスせずに、安全にPIDを取得するためのアクセサ関数を提供する。

**機能の利用シーン**：子プロセスのPIDをログに記録する場合、uv_kill()にPIDを渡して外部からシグナルを送信する場合、プロセスグループの管理を行う場合、デバッグ・監視のためにプロセスIDを取得する場合などで利用される。

**主要な処理内容**：
1. uv_process_t構造体のpidフィールドを読み取る
2. uv_pid_t型として返却する

**関連システム・外部連携**：特になし。構造体フィールドへの直接的なアクセサである。

**権限による制御**：特になし。メモリ上のフィールド読み取りのみ。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 16 | プロセス | 主機能 | uv_process_get_pid()によるプロセスPID取得のAPI定義 |

## 機能種別

データ取得（アクセサ）

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| proc | const uv_process_t* | Yes | PIDを取得するプロセスハンドル | NULLでないこと |

### 入力データソース

uv_spawn()によって初期化されたuv_process_tハンドル。

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| 戻り値 | uv_pid_t | プロセスのPID |

### 出力先

呼び出し元への戻り値として返却される。

## 処理フロー

### 処理シーケンス

```
1. uv_process_get_pid(proc)が呼び出される
   └─ proc->pid を返却する
```

### フローチャート

```mermaid
flowchart TD
    A[uv_process_get_pid呼び出し] --> B[proc->pid を読み取り]
    B --> C[uv_pid_t として返却]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-92-1 | フィールド直接読み取り | proc->pidフィールドをそのまま返却する | 常時 |

### 計算ロジック

特になし。

## データベース操作仕様

該当なし。

## エラー処理

### エラーケース一覧

本関数はエラーを返さない。

### リトライ仕様

不要。

## トランザクション仕様

該当なし。

## パフォーマンス要件

構造体フィールドの読み取りのみであるため、ナノ秒オーダーで完了する。

## セキュリティ考慮事項

特になし。

## 備考

- uv_process_t構造体のpidフィールドはヘッダーに公開されているが、将来の互換性のためにアクセサ関数の使用が推奨される

---

## コードリーディングガイド

本機能を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | uv.h | `include/uv.h` | uv_process_t構造体定義（1170-1174行目）。pidフィールド（1172行目）を確認する |

**読解のコツ**: UV_HANDLE_FIELDSマクロにより共通ハンドルフィールドが展開される。

#### Step 2: エントリーポイントと実装を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | uv.h | `include/uv.h` | API宣言（1181行目） |
| 2-2 | uv-data-getter-setters.c | `src/uv-data-getter-setters.c` | 実装（89-91行目）。proc->pidを返すだけのアクセサ |

**主要処理フロー**:
- **89行目**: `uv_pid_t uv_process_get_pid(const uv_process_t* proc)` - 関数定義
- **90行目**: `return proc->pid;` - pidフィールドの直接返却

### プログラム呼び出し階層図

```
uv_process_get_pid(proc)
    |
    +-- return proc->pid
```

### データフロー図

```
[入力]                    [処理]                [出力]

const uv_process_t* ───> pid読み取り ───> uv_pid_t
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| uv.h | `include/uv.h` | ヘッダー | API宣言とuv_process_t構造体定義 |
| uv-data-getter-setters.c | `src/uv-data-getter-setters.c` | ソース | アクセサ関数の実装 |
