本文同步刊載在筆者個人網站:https://hhming.moe/post/bye-rs/
最近和同事在聊天時,因為手邊剛好在操作 MySQL,無聊間想到,不知道能不能輸入 bye
來結束連線呢?
實際測試了下,沒有。於是開啟了我的第一個 Rust 練習作品之路。
實際開始動手前,依照我在 Linux 上的經驗,覺得如果沒有相關套件可以用的話,應該就不好搞;實際開始動手後,發現事情真的沒這麼單純,即便我使用 Command
crate 也不過是在當下 Rust 主程序下開一個執行緒去執行 exit
或送出 EOF
而已,真正關閉的只有那支執行緒。
OK 那不然來研究一下 exit
是怎麼實作的吧!但是在看到近兩千行的 C 後,我覺得我果然不是大神,放棄這條路吧。
在思考兩天後都沒想到什麼好答案,最後轉向 Rust 臺灣社群,在那邊得到不少建議和想法。其中最簡單明瞭的方式就是直接向 parent process 送出 kill 訊號。簡單查一下發現內建標準函式庫就有可以取得 parent id 的模組,因此就決定採這條路先做看看,而最後就是下面的成果:
原本還有認真思考要不要發布到 crates.io 上,但發現 「bye」這個名稱已經被註冊佔用了(也看不出是在幹嘛的套件)想說就算了,之後再研究怎麼設定 cross compilation 然後放在 GitHub release 下吧(如果真的有人會用的話)