about 4 years ago
我是谷阿莫,今天要來講一個孤兒怨的故事。
某天「長得一臉我超屌的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在這裡產生了...
execl("/bin/ls", "ls", "-al");
} else {
printf("B難產\n");
}
} else {
printf("A難產\n");
}
這時C就是一個daemon,其parent會變成init process (pid=1)
這時如果C死掉,不會成為zombie process,因為殭屍和惡魔不一樣
大魔王如果自己死掉就是死掉,電影就結束了,人類又戰勝了!好棒棒
daemon你去查Google會發現他剛好叫小惡魔,但又可以是小精靈,意思是看不見,不屬於任何人,不受他人擺佈這樣
不過有人把它翻譯成「守護進程」
但需要時,還是可以傳送訊號(signal)給小惡魔做溝通,科科