[分享] 孤兒怨 ( unix daemon process )
我是谷阿莫,今天要來講一個孤兒怨的故事
某天「長得我一臉超屌的Unix星球主角A」閒閒沒事幹生了一個「我超淫亂小孩B」
並期待「我超淫亂小孩B」未來能有什麼美好的光景
但糟糕的是「我超淫亂小孩B」人如其名,超淫亂
一出生馬上跟別人亂稿生出了C
因此「我超淫亂小孩B」立刻精盡人亡了
喔你不要問我為什麼一出生馬上就能懷孕生小孩
這是主角血脈的威能你懂嗎?這可不是你們愚蠢的人類能懂der
因為B死前沒有留下任何訊息告訴A說他生了小孩
於是C就成為了孤兒,很悲憤,就跑去當孤兒怨的主角
最後孤兒C就成了小惡魔(daemon),這就是孤兒怨的由來,科科
故事講完了 直接將上面的故事翻譯成C code
//主角A生了小孩B
pid_t child = fork();
if (child > 0) {
// 主角A期待B有所作為
wait(NULL);
} else ( child == 0 ) {
// B一出生後卻馬上生小孩
pid_t grandchild = fork();
if (grandchild > 0) {
// 所以B精盡人亡了
exit(0);
} else if (grandchild == 0) {
// 於是孤兒怨 C在這裡產生了...成了daemon小惡魔
execl("/bin/ls", "ls", "-al");
} else {
printf("B難產\n");
}
} else {
printf("A難產\n");
}
這時C就是一個daemon,其parent 會變成 init (pid=1)
這時如果C執行完會死掉,不會成為zombie process
因為殭屍和惡魔不一樣
魔王死掉就是死掉,電影就結束了,人類又獲勝了好棒棒
C結束後,系統會自動回收關掉process
daemon你去查google會發現他剛好叫小惡魔,但又可以是小精靈
意思是看不見,不屬於任何人,不受擺佈這樣
有人把它翻譯成「守護進程」
(https://zh.wikipedia.org/wiki/%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B)
有需要時,可以跟惡魔用訊號(signal)溝通哦
以上是 unix 新手的淺見
請大家鞭小力一點
另外其實可以直接用daemon這function直接做
不過它的原理就是這樣達成的 科科
圖文好讀版:(code 有highlight)
http://fonger.logdown.com/posts/2015/11/23/orphans-daemon-unix-programming
--
子貢問政。
子曰:「足食,足兵,民信之矣。」
子貢曰:「必不得已而去,於斯三者何先?」
曰:「去兵。」
子貢曰:「那甜度要調整嗎?」 ─你不可不知的論語奇聞軼事《顏淵第十二》
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.136.220
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1448280449.A.E9D.html
※ 編輯: Fonger (140.113.136.220), 11/23/2015 20:09:01
→
11/23 20:13, , 1F
11/23 20:13, 1F
→
11/23 20:16, , 2F
11/23 20:16, 2F
推
11/23 23:26, , 3F
11/23 23:26, 3F
噓
11/24 13:52, , 4F
11/24 13:52, 4F
→
11/24 17:29, , 5F
11/24 17:29, 5F
推
11/24 19:21, , 6F
11/24 19:21, 6F
→
11/24 22:29, , 7F
11/24 22:29, 7F
推
11/25 13:09, , 8F
11/25 13:09, 8F
→
11/25 13:44, , 9F
11/25 13:44, 9F
推
11/25 20:08, , 10F
11/25 20:08, 10F
推
11/25 21:22, , 11F
11/25 21:22, 11F
推
11/25 21:52, , 12F
11/25 21:52, 12F
推
11/25 22:05, , 13F
11/25 22:05, 13F
推
11/26 10:11, , 14F
11/26 10:11, 14F
推
11/29 20:54, , 15F
11/29 20:54, 15F
推
11/30 00:20, , 16F
11/30 00:20, 16F
※ 編輯: Fonger (140.113.69.228), 12/01/2015 12:13:40
推
12/19 03:34, , 17F
12/19 03:34, 17F