[t:/]$ 지식_

더블 포크와 데몬

2018/01/04

http://implement.tistory.com/75

https://kldp.org/node/113119

  1. 포크후 부모와 자식이 생긴다.
  2. 부모가 먼저 죽으면 자식의 부모는 init가 된다.
  3. 부모는 살아있고 자식이 먼저 죽으면 자식은 좀비가 된다.
  4. 부모가 waitpid를 호출 해주면 좀비를 해소한다. 안 하면 좀비가 쌓임
  5. 에...? 그럼 부모는 항상 자식이 죽기를 기다려야 해?

그래서 더블 포크

  1. 포크후 부모와 자식이 생긴다.
  2. 또 포크하면 손자가 생긴다.
  3. 자식이 죽는다. 손자의 부모는 init가 된다.
  4. 부모는 waitpid로 자식의 죽음을 확인하여 좀비가 되지 않게 한다.

즉, 부모가 먼저 죽으면 항상 문제가 없다. 그런데 자식이 먼저 죽으면 좀비가 되니까 이를 더블 포크로 막는다. 그런데 통상 부모가 슉 죽어버리면 바로 init를 받아서 데몬화 잘 되고 좀비화 될 일은 없다.

문제는 세션리더. 포크를 한 번만 하면 데몬으로 잘 도는 것 같지만 실행시킨 터미널을 닫으면 같이 죽는다.









[t:/] is not "technology - root". dawnsea, rss