# 簡易 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 (殭屍程序處理)