---
# System prepended metadata

title: 簡易 shell demo

---

# 簡易 shell demo

## 功能規劃說明

- 在 fork 之前檢查是否檔案存在，不存在則不 fork
- 在 parent 不等待 child 的情況時，能夠在 kill child 時處理掉 child 的 defunct process


## Demo

### 前置步驟

1. 編譯(如果執行檔沒有正確執行的話再做即可)

    g++ -o main main.cpp
    g++ -o child child.cpp

### wait 版本 demo 步驟

1. 再來直接執行輸出的執行檔就好(main)

2. 執行後會看到

    ```
    My process id is xxxxx
    1092927ms> 
    ```

3. 輸入 child 會執行 wait 版本的 child process

    ```
    My process id is xxxxx
    1092927ms> child
    child process xxxxx loop for 1 times
    enter "q" to quit
    ```

4. 打開 linux terminal，輸入 ps axe 可以看到正在執行的 child process

5. 在執行檔中輸入 q 後按 enter，或者使用 kill child_process_ID 可以殺掉 child process

6. 在 linux terminal，再次輸入 ps axe 可以看到 child process 不見了，並且繼續執行 parent process(main)

    ```
    1092927ms> child
    child process xxxxx loop for 1 times
    enter "q" to quit
    1092927ms> 
    ```

### no wait 版本 demo 步驟

1. 到執行檔(main)，輸入 child &

    ```
    1092927ms> child &
    1092927ms> child process xxxxx loop for 1 times
    enter "q" to quit
    ```

2. 打開 linux terminal，輸入 ps axe 可以看到正在執行的 child process

3. 使用 kill 指令把 child process 殺掉

4. 再次輸入 ps axe，會發現 child process 不見了，也沒有留下 [defunct] process (殭屍程序處理)

