1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
case: daemon with monitor
=========================
main monitor worker
|
|-fork------
| \
| |
|-read----->|
| |
| |--fork-----
| | \
| | |
| |-read----->|
| | |
| | listen
| | |
| |<----write-|
| | |
| read-ok |
| | |
| | accept
| | |
|<----write-| |
| | |
read-ok |-waitpid-->|
| |
exit(0) v
case: daemon with monitor with listen-error
===========================================
main monitor worker
|
|-fork------
| \
| |
|-read----->|
| |
| |--fork-----
| | \
| | |
| |-read----->|
| | |
| | listen => error
| | |
| | exit(1)
| |
| read-fail
| |
| exit(1)
|
read-fail
|
exit(1)
case: daemon without monitor
============================
main worker
|
|-fork------
| \
| |
|-read----->|
| |
| listen
| |
|<----write-|
| |
| accept
| |
| v
read-ok
|
exit(0)
case: daemon without monitor with listen-error
==============================================
main worker
|
|-fork------
| \
| |
|-read----->|
| |
| listen => error
| |
| exit(1)
|
read-fail
|
exit(1)
|