ЁЯСе рдзрдбрд╛ 09 тАФ Processes рдЖрдгрд┐ jobs: рдЗрдорд╛рд░рддреАрдд рдХреЛрдг рдЖрд╣реЗ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 09 ┬╖ рдкреБрдвреЗ: lesson-10-scheduling
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ09. Processes, signals, background jobs, рд╡рд╛рдЯ рдкрд╛рд╣рдгреЗ рдЖрдгрд┐ parallelism тАФ рдЖрдгрд┐ container рдЪреНрдпрд╛ PID 1 рдиреЗ рдХрд░рд╛рдпрд▓рд╛рдЪ рд╣рд╡реНрдпрд╛рдд рдЕрд╢рд╛ рджреЛрди рдЧреЛрд╖реНрдЯреА.
- bin/smoke_test.sh тАФ L09: background рдордзрд▓рд╛ рдПрдХ job рдЖрдгрд┐
wait
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдкреНрд░рддреНрдпреЗрдХ рдЪрд╛рд▓реВ program рдореНрд╣рдгрдЬреЗ рдЗрдорд╛рд░рддреАрддрд▓реА рдПрдХ рд╡реНрдпрдХреНрддреА, рдЬрд┐рдЪреНрдпрд╛рдХрдбреЗ badge рдХреНрд░рдорд╛рдВрдХ
(PID) рдЖрдгрд┐ рдПрдХ boss (parent) рдЕрд╕рддреЛ. ps рдореНрд╣рдгрдЬреЗ рдкрд╛рд╣реБрдгреНрдпрд╛рдВрдЪреА рд╡рд╣реА. рдПрдЦрд╛рджреНрдпрд╛рд▓рд╛ рдмрд╛рд╣реЗрд░
рдЬрд╛рдпрд▓рд╛ рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░ рддреБрдореНрд╣реА рдзреНрд╡рдирд┐рдХреНрд╖реЗрдкрдХ рд╡рд╛рдкрд░рддрд╛ тАФ рдПрдХ signal: TERM рдореНрд╣рдгрдЬреЗ "рдХреГрдкрдпрд╛ рдХрд╛рдо рдЖрд╡рд░рд╛", KILL
рдореНрд╣рдгрдЬреЗ "рдмрд╛рд╣реЗрд░, рдЖрддреНрддрд╛рдЪ", INT рдореНрд╣рдгрдЬреЗ Ctrl-C, HUP рдореНрд╣рдгрдЬреЗ "рддреБрдордЪреНрдпрд╛ рдиреЛрдВрджреА рдкреБрдиреНрд╣рд╛ рд╡рд╛рдЪрд╛". cmd &
рдПрдЦрд╛рджреНрдпрд╛рд▓рд╛ background рдордзреНрдпреЗ рдХрд╛рдорд╛рд▓рд╛ рдкрд╛рдард╡рддреЛ; wait рддреЗ рдкрд░рдд рдпреЗрдИрдкрд░реНрдпрдВрдд рдерд╛рдВрдмрддреЛ;
nohup рдореБрд│реЗ рддреБрдореНрд╣реА рдШрд░реА рдЧреЗрд▓реНрдпрд╛рд╡рд░рд╣реА рддреЗ рдХрд╛рдо рдХрд░рдд рд░рд╛рд╣рддрд╛рдд.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart TD
P1["PID 1 тАФ init / the entrypoint"] --> B["bash (your shell)"]
B --> J1["backup.sh & (job 1)"] --> T["tar"]
B --> J2["sleep 30 & (job 2)"]
B -.->|"kill -TERM"| J2
тЭУ рдХрд╛рдп
ps aux,pgrep -f name,top/htop,pstree.$$рдпрд╛ shell рдЪрд╛ PID,$!рд╢реЗрд╡рдЯрдЪрд╛ background PID.- Signals:
kill -TERM pid(15, рдкрдХрдбрддрд╛ рдпреЗрддреЛ тАФ рд╕рд╛рдлрд╕рдлрд╛рдИ рдХрд░рд╛),kill -KILL pid(9, рдкрдХрдбрддрд╛ рдпреЗрдд рдирд╛рд╣реА),-INT(2, Ctrl-C),-HUP(1, reload).trapрдкрдХрдбрддрд╛ рдпреЗрдгрд╛рд░реЗ signals рдкрдХрдбрддреЛ (рдзрдбрд╛ 08). cmd &background ┬╖jobs┬╖fg/bg┬╖wait(рд╕рдЧрд│реЗ) /wait $pid┬╖nohup cmd &рдХрд┐рдВрд╡рд╛setsidlogout рдирдВрддрд░рд╣реА рдЯрд┐рдХрддрд╛рдд ┬╖timeout 30 cmd.- Parallel:
xargs -P 4 -n 1 cmd┬╖parallel┬╖&+wait. - Zombies (рд╕рдВрдкрд▓реЗрд▓реЗ, рдкрдг рдХреЛрдгреА wait рдХреЗрд▓реЗ рдирд╛рд╣реА) рдЖрдгрд┐ orphans (parent рдореЗрд▓рд╛):
PID 1 рдиреЗ рддреНрдпрд╛рдВрдирд╛ рдЧреЛрд│рд╛ рдХрд░рд╛рдпрд▓рд╛рдЪ рд╣рд╡реЗ тАФ containers рдордзреНрдпреЗ
tini.exec cmdshell рдЪреА рдЬрд╛рдЧрд╛ рдШреЗрддреЛ рдореНрд╣рдгреВрди signals рдЦрд▒реНрдпрд╛ program рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрддрд╛рдд.
ЁЯдФ рдХрд╛
Deploys рдЬреБрдиреЗ processes рдерд╛рдВрдмрд╡рддрд╛рдд рдЖрдгрд┐ рдирд╡реЗ рд╕реБрд░реВ рдХрд░рддрд╛рдд; timeouts рднрд░рдХрдЯрд▓реЗрд▓реЗ processes рдорд╛рд░рддрд╛рдд; CI steps parallel рдЪрд╛рд▓рд╡рддреЗ; PID 1 рдиреЗ TERM рдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХреЗрд▓реЗ рддрд░ containers рд╡рд╛рдИрдЯ рдкрджреНрдзрддреАрдиреЗ рдорд░рддрд╛рдд. рд╣реЗ рд╕рдЧрд│реЗ signal рдЖрдгрд┐ job рдЪреЗрдЪ рдкреНрд░рд╢реНрди рдЖрд╣реЗрдд.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
smoke test рдордзрд▓рд╛ L09: (sleep 0.2; echo "the bell rang") & wait. backup.sh
рдЖрдкрд▓реЗ lock trap рдордзреНрдпреЗ рд╕реЛрдбрддреЗ, рдореНрд╣рдгреВрди run рдЪреНрдпрд╛ рдордзреЗрдЪ TERM рдЖрд▓рд╛ рддрд░реА directory
рд╕реНрд╡рдЪреНрдЫ рд░рд╛рд╣рддреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
sleep 300 & echo "pid $!"; jobs; kill -TERM %1; wait %1 2>/dev/null; echo "gone"
(trap 'echo "TERM received, cleaning up"; exit 0' TERM; sleep 60) & p=$!; sleep 0.3; kill -TERM $p; wait $p
for f in bin/*.sh; do (bash -n "$f" && echo "$f ok") & done; wait # syntax-check in parallel
printf '%s\n' 1 2 3 4 | xargs -P 4 -I{} sh -c 'sleep 0.{}; echo job {}'
timeout 1 sleep 5; echo "timeout exit: $?" # 124
ps -o pid,ppid,comm -p $$
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
рдПрдХ PID, рдпрд╛рджреАрдд рдПрдХ job, gone; trap рдХреЗрд▓реЗрд▓рд╛ process TERM received рдЫрд╛рдкрддреЛ;
рддреАрди ok рдУрд│реА; рдЬрд╡рд│рдЬрд╡рд│ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдорд╛рдиреЗ рдЪрд╛рд░ job N рдУрд│реА; timeout exit: 124;
рддреБрдордЪрд╛ shell рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ parent.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рддреБрдореНрд╣реА processes рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддрд╛, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╡рд░ рд▓рдХреНрд╖ рдареЗрд╡реВ рд╢рдХрддрд╛, рддреНрдпрд╛рдВрдирд╛ signal рдкрд╛рдард╡реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рд╡рд╛рдЯ рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдХрд╛рдо parallel рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛, рдЖрдгрд┐ KILL рдЖрдзреА TERM рд╣рд╛ рдирдореНрд░ (рдЖрдгрд┐ рдпреЛрдЧреНрдп) рдХреНрд░рдо рдХрд╛ рдЖрд╣реЗ рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдЖрдзреАрдЪ
kill -9. process рд▓рд╛ рд╕рд╛рдлрд╕рдлрд╛рдИрдЪреА рд╕рдВрдзреАрдЪ рдорд┐рд│рдд рдирд╛рд╣реА тАФ locks рдЖрдгрд┐ temp files рддрд╢рд╛рдЪ рд░рд╛рд╣рддрд╛рдд. execрд╢рд┐рд╡рд╛рдп shell entrypoint: Docker рдЪрд╛ TERM shell рд▓рд╛ рд▓рд╛рдЧрддреЛ, app рд▓рд╛ рддреЛ рдХрдзреАрдЪ рдРрдХреВ рдпреЗрдд рдирд╛рд╣реА, 10 s рдирдВрддрд░ KILL.- script рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА
waitрд╡рд┐рд╕рд░рдгреЗ: children рдЕрдЬреВрди рдЪрд╛рд▓реВ рдЕрд╕рддрд╛рдирд╛рдЪ рддреА exit рд╣реЛрддреЗ.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: graceful shutdown, zero-downtime restarts, Kubernetes рдордзрд▓рд╛ 10 seconds рдЪрд╛ grace period тАФ рд╕рдЧрд│реЗ рдореНрд╣рдгрдЬреЗ "process TERM рд╣рд╛рддрд╛рд│рддреЛ рдХрд╛?". Docker рд╢рд╛рд│реЗрддрд▓рд╛ entrypoint рдЪрд╛ рдзрдбрд╛ рд╣рд╛рдЪ рдЖрд╣реЗ.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 10 тАФ scheduling рдЖрдгрд┐ automation: рдШрдВрдЯрд╛, рдЖрдгрд┐ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдХрдзреАрдЪ рджреЛрдирджрд╛ рди рдЪрд╛рд▓рдгрд╛рд░рд╛ backup.