{"id":500423,"date":"2026-10-27T09:16:19","date_gmt":"2026-10-27T06:16:19","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=500423"},"modified":"2026-10-27T09:16:19","modified_gmt":"2026-10-27T06:16:19","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=500423","title":{"rendered":"\u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0432\u0435\u0440\u043d\u0443\u043b 124, \u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d: \u043a\u0430\u043a\u0438\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u0435\u0440\u0436\u0430\u0442 flock"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u0438\u0437 cron \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u043b\u0430 \u043b\u0438\u043c\u0438\u0442 <code>timeout 600<\/code>, \u0432 \u043b\u043e\u0433\u0435 \u043a\u043e\u0434 124. \u0427\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0442\u0443 cron \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0451 \u0441\u043d\u043e\u0432\u0430, \u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 <code>flock -n<\/code> \u043c\u043e\u043b\u0447\u0430 \u0432\u044b\u0445\u043e\u0434\u0438\u0442: lock \u0437\u0430\u043d\u044f\u0442, \u00ab\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0435\u0449\u0451 \u0438\u0434\u0451\u0442\u00bb. \u041d\u043e <code>timeout<\/code> \u0443\u0436\u0435 \u0432\u0435\u0440\u043d\u0443\u043b 124: \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0434\u0430\u0447\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f, \u0430 \u0435\u0451 \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0442\u043e\u043c\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0441\u0435\u043c\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0444\u043e\u043d\u0435: <code>setsid -f<\/code>, <code>nohup \u2026 &amp;<\/code>, <code>start-stop-daemon --background<\/code>, \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u043d\u0430 Python \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0438 \u0431\u0435\u0437, <code>ssh-agent<\/code>, <code>gpg-agent<\/code>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0438\u0437 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u0440\u0436\u0438\u0442 <code>flock<\/code>, \u0438 \u043e\u0431\u0440\u044b\u0432\u0430\u043b\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>timeout 2<\/code> \u0438 <code>subprocess.run(timeout=2)<\/code>. \u0414\u0435\u043c\u043e\u043d\u0430 \u043d\u0435 \u0443\u0431\u0438\u043b\u0430 \u043d\u0438 \u043e\u0434\u043d\u0430 \u043e\u0431\u0451\u0440\u0442\u043a\u0430. \u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a, \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0430\u043c\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430: \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b. <code>gpg-agent<\/code> \u0438 \u043d\u0430\u0438\u0432\u043d\u044b\u0439 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u0434\u0435\u0440\u0436\u0430\u0442 lock, <code>ssh-agent<\/code> \u0438 <code>start-stop-daemon<\/code> \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u044e\u0442. \u0417\u0430\u0442\u043e \u0443 \u0442\u0435\u0445, \u0447\u0442\u043e \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u044e\u0442, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043a\u043e\u043f\u044f\u0442\u0441\u044f: \u043f\u044f\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u043f\u043e\u0434\u0440\u044f\u0434 \u0434\u0430\u043b\u0438 \u043f\u044f\u0442\u044c \u0436\u0438\u0432\u044b\u0445 <code>ssh-agent<\/code>. \u0410 \u043e\u0431\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e: 124 \u043e\u0442 <code>timeout<\/code>, <code>TimeoutExpired<\/code> \u043e\u0442 <code>subprocess.run<\/code>.<\/p>\n<h3>\u0421\u0442\u0435\u043d\u0434<\/h3>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u0431\u0435\u0440\u0451\u0442 lock \u043d\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 9, \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0444\u043e\u043d \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0435\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438 \u0436\u0434\u0451\u0442 30 \u0441\u0435\u043a\u0443\u043d\u0434. \u0421\u0430\u043c\u0430 \u043e\u043d\u0430 \u0436\u0434\u0451\u0442 \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u0441\u043c\u0435\u0440\u0442\u0438 lock \u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043c\u043e\u043a:<\/p>\n<pre><code class=\"bash\">exec 9&gt;\"$D\/lock\"; flock -n 9 || { echo \"job: lock busy\"; exit 1; }case $M in  setsid_f)  setsid -f sleep 30 &lt;\/dev\/null &gt;\/dev\/null 2&gt;&amp;1 ;;  nohup_bg)  nohup sleep 30 &lt;\/dev\/null &gt;\/dev\/null 2&gt;&amp;1 &amp; ;;  ssd_bg)    start-stop-daemon --start --background --make-pidfile \\                 --pidfile \"$D\/ssd.pid\" --exec \/usr\/bin\/sleep -- 30 ;;  py_dfork)  python3 dfork.py keep ;;     # \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork + setsid  py_dfork_close) python3 dfork.py close ;;  # \u0442\u043e \u0436\u0435 + os.closerange(3, 1024)  ssh_agent) eval \"$(ssh-agent -s)\" &gt;\/dev\/null ;;  gpg_agent) export GNUPGHOME=\"$D\/gh.$$\"; mkdir -m 700 \"$GNUPGHOME\"             gpg-agent --daemon &gt;\/dev\/null 2&gt;&amp;1 ;;esacsleep 30 9&gt;&amp;-<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u0427\u0435\u0440\u0435\u0437 \u0434\u0432\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043f\u043e\u0441\u043b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432 <code>\/proc<\/code> \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0441\u043c\u043e\u0442\u0440\u0438\u0442, \u0443 \u043a\u043e\u0433\u043e \u0441\u0440\u0435\u0434\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0435\u0441\u0442\u044c lock, \u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u0442 <code>flock -n<\/code> \u0442\u0435\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u043e\u043c, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a. \u0423 <code>ssh-agent<\/code> \u0438 <code>gpg-agent<\/code> \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <code>\/proc\/PID\/fd<\/code> \u0437\u0430\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f: \u043e\u0431\u0430 \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a non-dumpable. \u0414\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044f \u044f \u043d\u0430\u0445\u043e\u0434\u0438\u043b \u0438\u043d\u0430\u0447\u0435: \u0443\u0431\u0438\u0432\u0430\u043b \u0432\u044b\u0436\u0438\u0432\u0448\u0438\u0445 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0433\u043e lock \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u0441\u044f. \u041a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u0440\u043e\u0433\u043d\u0430\u043d\u0430 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u044b \u0441\u043e\u0432\u043f\u0430\u043b\u0438. \u041e\u0431\u0440\u0430\u0437 <code>python:3.15<\/code> (Debian 13), coreutils 9.7, Python 3.15.1.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0430\u0436\u0435\u043d \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. \u041f\u043e man flock(2) \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u043f\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 <code>fork<\/code> \u0435\u0451 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442, \u0438 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u0430, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043a\u043e\u043f\u0438\u044f. \u041b\u044e\u0431\u043e\u0439 \u043f\u043e\u0442\u043e\u043c\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 9 \u0438 \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u043b \u0435\u0433\u043e, \u0434\u0435\u0440\u0436\u0438\u0442 lock, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e lock \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442.<\/p>\n<h3>\u0421\u0435\u043c\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0443\u0439\u0442\u0438 \u0432 \u0444\u043e\u043d<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0441\u043f\u043e\u0441\u043e\u0431<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0436\u0438\u0432 \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">lock: <code>timeout 2<\/code><\/p>\n<\/th>\n<th>\n<p align=\"left\">lock: <code>run(timeout=2)<\/code><\/p>\n<\/th>\n<th>\n<p align=\"left\">\u043a\u0442\u043e \u0434\u0435\u0440\u0436\u0438\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>setsid -f sleep<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043d\u044f\u0442 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043d\u044f\u0442 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">sleep<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>nohup sleep &amp;<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 <code>run<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043d\u044f\u0442 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">sleep<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>start-stop-daemon --background<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0438\u043a\u0442\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u0431\u0435\u0437 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f fd<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043d\u044f\u0442 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043d\u044f\u0442 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">python3<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork + <code>closerange<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0438\u043a\u0442\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ssh-agent<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0438\u043a\u0442\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>gpg-agent --daemon<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043d\u044f\u0442 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043d\u044f\u0442 3\/3<\/p>\n<\/td>\n<td>\n<p align=\"left\">gpg-agent<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0431\u0451\u0440\u0442\u043a\u0438 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0432\u043e \u0432\u0441\u0435\u0445 42 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445: \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 2,00 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0441 \u043a\u043e\u0434\u043e\u043c 124 \u0438\u043b\u0438 <code>TimeoutExpired<\/code>. \u041d\u0438 \u043e\u0434\u043d\u0430 \u043d\u0435 \u0443\u0431\u0438\u043b\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0448\u0451\u043b \u0432 \u0441\u0432\u043e\u044e \u0441\u0435\u0441\u0441\u0438\u044e.<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u0433\u0434\u0435 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u0447\u0442\u043e-\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442, \u2014 <code>nohup<\/code>. \u041e\u043d \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0441\u0441\u0438\u044e \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u0443, \u043e\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 SIGHUP. <code>timeout<\/code> \u0431\u0435\u0437 <code>--foreground<\/code> \u0448\u043b\u0451\u0442 TERM \u0432\u0441\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0438 <code>sleep<\/code> \u043f\u043e\u0434 <code>nohup<\/code> \u0443\u043c\u0438\u0440\u0430\u0435\u0442. <code>subprocess.run(timeout=)<\/code> \u0448\u043b\u0451\u0442 SIGKILL \u043e\u0434\u043d\u043e\u043c\u0443 PID, \u0441\u0432\u043e\u0435\u043c\u0443 \u043f\u0440\u044f\u043c\u043e\u043c\u0443 \u0440\u0435\u0431\u0451\u043d\u043a\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u043e\u0442 \u0436\u0435 <code>sleep<\/code> \u0432\u044b\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 \u0434\u0435\u0440\u0436\u0438\u0442 lock. \u042d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0438 \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c: \u0432 <code>src\/timeout.c<\/code> \u0441\u0438\u0433\u043d\u0430\u043b \u0443\u0445\u043e\u0434\u0438\u0442 \u0433\u0440\u0443\u043f\u043f\u0435, \u0432 <code>subprocess.run<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>process.kill()<\/code>.<\/p>\n<p>\u0412\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0430. <code>setsid -f<\/code>, \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u0438 <code>gpg-agent<\/code> \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044e\u0442. <code>start-stop-daemon --background<\/code>, <code>ssh-agent<\/code> \u0438 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u043f\u043e \u043e\u0431\u0440\u0430\u0437\u0446\u0443 PEP 3143 (\u043d\u0430 \u0441\u0442\u0435\u043d\u0434\u0435 \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b 3\u20131023) \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442. \u0418\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 <code>timeout<\/code> \u0438 <code>subprocess<\/code> \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0443\u0437\u043d\u0430\u0442\u044c, \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0435\u0451 \u0432\u0435\u0440\u0441\u0438\u0438.<\/p>\n<h3>\u041f\u044f\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u043f\u043e\u0434\u0440\u044f\u0434<\/h3>\n<p>\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 lock \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0438\u0441\u0445\u043e\u0434. \u042f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u0430\u0436\u0434\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u044f\u0442\u044c \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434 \u043f\u043e\u0434 <code>timeout 2<\/code>, \u043a\u0430\u043a cron \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c, \u0441 \u043e\u0431\u0449\u0438\u043c lock-\u0444\u0430\u0439\u043b\u043e\u043c:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0441\u043f\u043e\u0441\u043e\u0431<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u043f\u0440\u043e\u0448\u043b\u0438<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0436\u0438\u0432\u044b\u0445 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u0432 \u043a\u043e\u043d\u0446\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">lock \u043f\u043e\u0441\u043b\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>setsid -f<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">4<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043d\u044f\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u0431\u0435\u0437 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">4<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043d\u044f\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>gpg-agent<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">4<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043d\u044f\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>start-stop-daemon --background<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork + <code>closerange<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ssh-agent<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0423 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0434\u0432\u0430 \u0438\u0441\u0445\u043e\u0434\u0430. \u041f\u043e\u0442\u043e\u043c\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u0441\u044a\u0435\u0434\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0438, \u0438 cron \u0432\u0438\u0434\u0438\u0442 \u044d\u0442\u043e \u043a\u0430\u043a \u00ab\u0443\u0436\u0435 \u0438\u0434\u0451\u0442\u00bb. \u041f\u043e\u0442\u043e\u043c\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u043b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0422\u043e\u043b\u044c\u043a\u043e <code>start-stop-daemon<\/code> \u043d\u0435 \u0440\u0430\u0437\u043c\u043d\u043e\u0436\u0438\u043b\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u0438 \u0436\u0438\u0432\u043e\u043c PID \u0438\u0437 pidfile. \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0434\u0435\u0441\u044c \u043d\u0438 \u043f\u0440\u0438 \u0447\u0451\u043c. \u041e\u0431\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0432\u043e \u0432\u0441\u0435\u0445 \u0448\u0435\u0441\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0432\u0435\u0440\u043d\u0443\u043b 124, \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u043d\u0443\u043b\u0438 1 \u043e\u0442 <code>flock -n<\/code>. \u041f\u043e \u043a\u043e\u0434\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0435 \u0443\u0433\u0430\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435: \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0438 \u0438\u043b\u0438 \u0443\u0442\u0435\u0447\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432.<\/p>\n<h3>\u0427\u0442\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u043e lock<\/h3>\n<p>\u0424\u043b\u0430\u0433\u0438 <code>timeout<\/code> \u0442\u0443\u0442 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442. \u041d\u0430 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435 \u0438\u0437 \u0442\u0440\u0451\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \u0441 \u0442\u0435\u043c \u0436\u0435 lock (\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0444\u043e\u043d\u043e\u0432\u044b\u0439, \u043f\u043e\u0441\u043b\u0435 <code>setsid<\/code>, \u0441 <code>trap '' TERM<\/code>) \u044f \u043f\u0440\u043e\u0433\u043d\u0430\u043b <code>timeout 2<\/code>, <code>--foreground<\/code> \u0438 <code>-k 1 2<\/code>: setsid-\u043f\u043e\u0442\u043e\u043c\u043a\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u043b \u043d\u0438 \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442, lock \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u0437\u0430\u043d\u044f\u0442 \u0432\u043e \u0432\u0441\u0435\u0445 15 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445.<\/p>\n<p><code>subprocess.run(timeout=2)<\/code> \u0443\u0431\u0438\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0440\u0435\u0431\u0451\u043d\u043a\u0430, <code>Popen<\/code> \u0441 <code>os.killpg<\/code> \u2014 \u0432\u0441\u0435\u0445, \u043a\u0440\u043e\u043c\u0435 setsid-\u043f\u043e\u0442\u043e\u043c\u043a\u0430.<\/p>\n<p>\u0411\u0435\u0437 cgroup \u0432\u0441\u0451 \u0434\u0435\u0440\u0435\u0432\u043e \u0437\u0430\u043a\u0440\u044b\u043b \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u041e\u0431\u0451\u0440\u0442\u043a\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0431\u044f subreaper \u0447\u0435\u0440\u0435\u0437 <code>prctl(PR_SET_CHILD_SUBREAPER)<\/code>, \u0438 \u043e\u0441\u0438\u0440\u043e\u0442\u0435\u0432\u0448\u0438\u0435 \u043f\u043e\u0442\u043e\u043c\u043a\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u0432\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u043d\u0435\u0439 \u0432\u043c\u0435\u0441\u0442\u043e PID 1. \u041f\u043e\u0441\u043b\u0435 <code>killpg<\/code> \u043e\u043d\u0430 \u043e\u0431\u0445\u043e\u0434\u0438\u0442 <code>\/proc<\/code>, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u0447\u0438\u0441\u043b\u0438\u0442\u0441\u044f \u0435\u0451 \u043f\u043e\u0442\u043e\u043c\u043a\u0430\u043c\u0438, \u0438 \u0448\u043b\u0451\u0442 \u0438\u043c KILL:<\/p>\n<pre><code class=\"python\">PR_SET_CHILD_SUBREAPER = 36ctypes.CDLL(None, use_errno=True).prctl(PR_SET_CHILD_SUBREAPER, 1, 0, 0, 0)p = subprocess.Popen(cmd, start_new_session=True)try:    p.wait(timeout=2)except subprocess.TimeoutExpired:    os.killpg(p.pid, signal.SIGTERM)    ...                                   # \u0436\u0434\u0451\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0437\u0430\u0442\u0435\u043c killpg KILL    while left := descendants(os.getpid()):   # \u043e\u0431\u0445\u043e\u0434 \/proc \u043f\u043e ppid        for pid in left:            os.kill(pid, signal.SIGKILL)        ...                                   # \u043f\u043e\u0436\u0430\u0442\u044c \u0437\u043e\u043c\u0431\u0438 \u0447\u0435\u0440\u0435\u0437 waitpid(-1, WNOHANG)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435 \u044d\u0442\u043e \u0437\u0430\u043d\u044f\u043b\u043e 2,05 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0432\u043c\u0435\u0441\u0442\u043e 2,00, setsid-\u043f\u043e\u0442\u043e\u043c\u043e\u043a \u0443\u0431\u0438\u0442, lock \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d. \u041d\u0430 \u0434\u0435\u043c\u043e\u043d\u0430\u0445 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044f subreaper \u043d\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u043b; \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0442\u043e\u0442 \u0436\u0435 (\u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u043e\u0442\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u043e\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f), \u043d\u043e \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0437\u0430\u043c\u0435\u0440\u0430 \u043d\u0435\u0442. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0443\u0442\u044c \u2014 cgroup, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 systemd \u0441 <code>KillMode=control-group<\/code>: \u0438\u0437 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0443\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 <code>setsid<\/code>, \u0430 cgroup \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0430\u043a \u043d\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u0435\u0442. \u0412 \u043c\u043e\u0451\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 <code>\/sys\/fs\/cgroup<\/code> \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0434\u043e\u0447\u0435\u0440\u043d\u044e\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>cgroup.kill<\/code> \u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b.<\/p>\n<h3>\u0427\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442<\/h3>\n<p>\u0414\u0435\u043c\u043e\u043d, \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 <code>timeout<\/code>, \u0438 <code>subprocess.run<\/code>, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0437\u0430\u043a\u0440\u044b\u043b \u043b\u0438 \u043e\u043d \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0441 lock. \u0417\u0430\u043a\u0440\u044b\u043b \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0438 \u0438\u0434\u0443\u0442, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u043e\u043b\u044c\u0448\u0435, \u0435\u0441\u043b\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0441\u0430\u043c\u0430 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430, \u043a\u0430\u043a <code>start-stop-daemon<\/code> \u0441 pidfile. \u041d\u0435 \u0437\u0430\u043a\u0440\u044b\u043b \u2014 cron \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0438, \u043f\u043e\u043a\u0430 \u0434\u0435\u043c\u043e\u043d \u0436\u0438\u0432. \u041e\u0431\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435: 124 \u0438\u043b\u0438 <code>TimeoutExpired<\/code>.<\/p>\n<p>\u0427\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043b\u0438 \u0432\u0430\u0448\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0441 lock: <code>gpg-agent<\/code>, <code>setsid -f<\/code> \u0438 \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0438 \u0434\u0435\u0440\u0436\u0430\u0442 lock, <code>ssh-agent<\/code>, <code>start-stop-daemon<\/code> \u0438 fork \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u2014 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442.<\/p>\n<p>\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e (<code>9&gt;&amp;-<\/code> \u0434\u043b\u044f \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043c\u043a\u0430 \u0438\u043b\u0438 <code>flock -o<\/code>) \u043c\u043e\u0436\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0451\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0432\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a. \u041d\u0430 \u0441\u0442\u0435\u043d\u0434\u0435 \u0441 <code>flock -o<\/code> \u0432\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b, \u043f\u043e\u043a\u0430 \u043f\u043e\u0442\u043e\u043c\u043a\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0435\u0449\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438: \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u043e\u043d\u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 60 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0415\u0441\u043b\u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0448\u0451\u043b \u0432 \u0441\u0432\u043e\u044e \u0441\u0435\u0441\u0441\u0438\u044e \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0440\u0435\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043d\u0443\u0436\u0435\u043d subreaper \u0438\u043b\u0438 cgroup, \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u0441 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442.<\/p>\n<p>\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435: \u0431\u043b\u043e\u043a\u0438 \u0441 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438 \u2014 \u043e\u0431\u0440\u0430\u0437 <code>python:3.15<\/code> (Debian 13), Python 3.15.1, GNU coreutils timeout 9.7, gpg-agent 2.4.7, start-stop-daemon 1.22.22, OpenSSH 10.0p1; \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u2014 <code>python:3.15-slim<\/code>, Python 3.15.0, bash 5.2.37, util-linux flock 2.41.5. \u041c\u0430\u043d\u0443\u0430\u043b timeout \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 GNU \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 9.12, \u043b\u043e\u0433\u0438\u043a\u0443 \u0433\u0440\u0443\u043f\u043f\u044b \u0438 <code>-k<\/code> \u044f \u0441\u0432\u0435\u0440\u044f\u043b \u043f\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 <code>src\/timeout.c<\/code>.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1099830\/\">https:\/\/habr.com\/ru\/articles\/1099830\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u0438\u0437 cron \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u043b\u0430 \u043b\u0438\u043c\u0438\u0442 timeout 600, \u0432 \u043b\u043e\u0433\u0435 \u043a\u043e\u0434 124. \u0427\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0442\u0443 cron \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0435\u0451 \u0441\u043d\u043e\u0432\u0430, \u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 flock -n \u043c\u043e\u043b\u0447\u0430 \u0432\u044b\u0445\u043e\u0434\u0438\u0442: lock \u0437\u0430\u043d\u044f\u0442, \u00ab\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0435\u0449\u0451 \u0438\u0434\u0451\u0442\u00bb. \u041d\u043e timeout \u0443\u0436\u0435 \u0432\u0435\u0440\u043d\u0443\u043b 124: \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0434\u0430\u0447\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f, \u0430 \u0435\u0451 \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0442\u043e\u043c\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f.\u042f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0441\u0435\u043c\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0444\u043e\u043d\u0435: setsid -f, nohup \u2026 &amp;, start-stop-daemon &#8212;background, \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u043d\u0430 Python \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0438 \u0431\u0435\u0437, ssh-agent, gpg-agent. \u041a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0438\u0437 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u0440\u0436\u0438\u0442 flock, \u0438 \u043e\u0431\u0440\u044b\u0432\u0430\u043b\u0441\u044f \u0447\u0435\u0440\u0435\u0437 timeout 2 \u0438 subprocess.run(timeout=2). \u0414\u0435\u043c\u043e\u043d\u0430 \u043d\u0435 \u0443\u0431\u0438\u043b\u0430 \u043d\u0438 \u043e\u0434\u043d\u0430 \u043e\u0431\u0451\u0440\u0442\u043a\u0430. \u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a, \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0430\u043c\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430: \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043b\u0438 \u043e\u043d\u0430 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b. gpg-agent \u0438 \u043d\u0430\u0438\u0432\u043d\u044b\u0439 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u0434\u0435\u0440\u0436\u0430\u0442 lock, ssh-agent \u0438 start-stop-daemon \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u044e\u0442. \u0417\u0430\u0442\u043e \u0443 \u0442\u0435\u0445, \u0447\u0442\u043e \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u044e\u0442, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043a\u043e\u043f\u044f\u0442\u0441\u044f: \u043f\u044f\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u043f\u043e\u0434\u0440\u044f\u0434 \u0434\u0430\u043b\u0438 \u043f\u044f\u0442\u044c \u0436\u0438\u0432\u044b\u0445 ssh-agent. \u0410 \u043e\u0431\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e: 124 \u043e\u0442 timeout, TimeoutExpired \u043e\u0442 subprocess.run.\u0421\u0442\u0435\u043d\u0434\u0417\u0430\u0434\u0430\u0447\u0430 \u0431\u0435\u0440\u0451\u0442 lock \u043d\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 9, \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0444\u043e\u043d \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0435\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438 \u0436\u0434\u0451\u0442 30 \u0441\u0435\u043a\u0443\u043d\u0434. \u0421\u0430\u043c\u0430 \u043e\u043d\u0430 \u0436\u0434\u0451\u0442 \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u0441\u043c\u0435\u0440\u0442\u0438 lock \u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043c\u043e\u043a:exec 9&gt;&#187;$D\/lock&#187;; flock -n 9 || { echo &#171;job: lock busy&#187;; exit 1; }case $M in  setsid_f)  setsid -f sleep 30 &lt;\/dev\/null &gt;\/dev\/null 2&gt;&amp;1 ;;  nohup_bg)  nohup sleep 30 &lt;\/dev\/null &gt;\/dev\/null 2&gt;&amp;1 &amp; ;;  ssd_bg)    start-stop-daemon &#8212;start &#8212;background &#8212;make-pidfile \\                 &#8212;pidfile &#171;$D\/ssd.pid&#187; &#8212;exec \/usr\/bin\/sleep &#8212; 30 ;;  py_dfork)  python3 dfork.py keep ;;     # \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork + setsid  py_dfork_close) python3 dfork.py close ;;  # \u0442\u043e \u0436\u0435 + os.closerange(3, 1024)  ssh_agent) eval &#171;$(ssh-agent -s)&#187; &gt;\/dev\/null ;;  gpg_agent) export GNUPGHOME=&#187;$D\/gh.$$&#187;; mkdir -m 700 &#171;$GNUPGHOME&#187;             gpg-agent &#8212;daemon &gt;\/dev\/null 2&gt;&amp;1 ;;esacsleep 30 9&gt;&amp;-\u0427\u0435\u0440\u0435\u0437 \u0434\u0432\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043f\u043e\u0441\u043b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432 \/proc \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0441\u043c\u043e\u0442\u0440\u0438\u0442, \u0443 \u043a\u043e\u0433\u043e \u0441\u0440\u0435\u0434\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0435\u0441\u0442\u044c lock, \u0438 \u043f\u0440\u043e\u0431\u0443\u0435\u0442 flock -n \u0442\u0435\u043c \u0436\u0435 \u0444\u0430\u0439\u043b\u043e\u043c, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a. \u0423 ssh-agent \u0438 gpg-agent \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \/proc\/PID\/fd \u0437\u0430\u043a\u0440\u044b\u0442 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f: \u043e\u0431\u0430 \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442 \u0441\u0435\u0431\u044f \u043a\u0430\u043a non-dumpable. \u0414\u0435\u0440\u0436\u0430\u0442\u0435\u043b\u044f \u044f \u043d\u0430\u0445\u043e\u0434\u0438\u043b \u0438\u043d\u0430\u0447\u0435: \u0443\u0431\u0438\u0432\u0430\u043b \u0432\u044b\u0436\u0438\u0432\u0448\u0438\u0445 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u043b, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0433\u043e lock \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u0441\u044f. \u041a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u0440\u043e\u0433\u043d\u0430\u043d\u0430 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430, \u043f\u043e\u0432\u0442\u043e\u0440\u044b \u0441\u043e\u0432\u043f\u0430\u043b\u0438. \u041e\u0431\u0440\u0430\u0437 python:3.15 (Debian 13), coreutils 9.7, Python 3.15.1.\u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0430\u0436\u0435\u043d \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. \u041f\u043e man flock(2) \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u043f\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 fork \u0435\u0451 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442, \u0438 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u0430, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043a\u043e\u043f\u0438\u044f. \u041b\u044e\u0431\u043e\u0439 \u043f\u043e\u0442\u043e\u043c\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 9 \u0438 \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u043b \u0435\u0433\u043e, \u0434\u0435\u0440\u0436\u0438\u0442 lock, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e lock \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442.\u0421\u0435\u043c\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0443\u0439\u0442\u0438 \u0432 \u0444\u043e\u043d\u0441\u043f\u043e\u0441\u043e\u0431\u0436\u0438\u0432 \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430lock: timeout 2lock: run(timeout=2)\u043a\u0442\u043e \u0434\u0435\u0440\u0436\u0438\u0442setsid -f sleep\u0434\u0430\u0437\u0430\u043d\u044f\u0442 3\/3\u0437\u0430\u043d\u044f\u0442 3\/3sleepnohup sleep &amp;\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 run\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3\u0437\u0430\u043d\u044f\u0442 3\/3sleepstart-stop-daemon &#8212;background\u0434\u0430\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3\u043d\u0438\u043a\u0442\u043e\u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u0431\u0435\u0437 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f fd\u0434\u0430\u0437\u0430\u043d\u044f\u0442 3\/3\u0437\u0430\u043d\u044f\u0442 3\/3python3\u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork + closerange\u0434\u0430\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3\u043d\u0438\u043a\u0442\u043essh-agent\u0434\u0430\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d 3\/3\u043d\u0438\u043a\u0442\u043egpg-agent &#8212;daemon\u0434\u0430\u0437\u0430\u043d\u044f\u0442 3\/3\u0437\u0430\u043d\u044f\u0442 3\/3gpg-agent\u041e\u0431\u0451\u0440\u0442\u043a\u0438 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0432\u043e \u0432\u0441\u0435\u0445 42 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445: \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 2,00 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0441 \u043a\u043e\u0434\u043e\u043c 124 \u0438\u043b\u0438 TimeoutExpired. \u041d\u0438 \u043e\u0434\u043d\u0430 \u043d\u0435 \u0443\u0431\u0438\u043b\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0448\u0451\u043b \u0432 \u0441\u0432\u043e\u044e \u0441\u0435\u0441\u0441\u0438\u044e.\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u0433\u0434\u0435 \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u0447\u0442\u043e-\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442, \u2014 nohup. \u041e\u043d \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u0443\u044e \u0441\u0435\u0441\u0441\u0438\u044e \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0433\u0440\u0443\u043f\u043f\u0443, \u043e\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 SIGHUP. timeout \u0431\u0435\u0437 &#8212;foreground \u0448\u043b\u0451\u0442 TERM \u0432\u0441\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0438 sleep \u043f\u043e\u0434 nohup \u0443\u043c\u0438\u0440\u0430\u0435\u0442. subprocess.run(timeout=) \u0448\u043b\u0451\u0442 SIGKILL \u043e\u0434\u043d\u043e\u043c\u0443 PID, \u0441\u0432\u043e\u0435\u043c\u0443 \u043f\u0440\u044f\u043c\u043e\u043c\u0443 \u0440\u0435\u0431\u0451\u043d\u043a\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u043e\u0442 \u0436\u0435 sleep \u0432\u044b\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 \u0434\u0435\u0440\u0436\u0438\u0442 lock. \u042d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0438 \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c: \u0432 src\/timeout.c \u0441\u0438\u0433\u043d\u0430\u043b \u0443\u0445\u043e\u0434\u0438\u0442 \u0433\u0440\u0443\u043f\u043f\u0435, \u0432 subprocess.run \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f process.kill().\u0412\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0430. setsid -f, \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u0438 gpg-agent \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044e\u0442. start-stop-daemon &#8212;background, ssh-agent \u0438 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u043f\u043e \u043e\u0431\u0440\u0430\u0437\u0446\u0443 PEP 3143 (\u043d\u0430 \u0441\u0442\u0435\u043d\u0434\u0435 \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b 3\u20131023) \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442. \u0418\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 timeout \u0438 subprocess \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0443\u0437\u043d\u0430\u0442\u044c, \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0435\u0451 \u0432\u0435\u0440\u0441\u0438\u0438.\u041f\u044f\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u043f\u043e\u0434\u0440\u044f\u0434\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 lock \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0438\u0441\u0445\u043e\u0434. \u042f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u043a\u0430\u0436\u0434\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u044f\u0442\u044c \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434 \u043f\u043e\u0434 timeout 2, \u043a\u0430\u043a cron \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c, \u0441 \u043e\u0431\u0449\u0438\u043c lock-\u0444\u0430\u0439\u043b\u043e\u043c:\u0441\u043f\u043e\u0441\u043e\u0431\u043f\u0440\u043e\u0448\u043b\u0438\u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b\u0436\u0438\u0432\u044b\u0445 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u0432 \u043a\u043e\u043d\u0446\u0435lock \u043f\u043e\u0441\u043b\u0435setsid -f141\u0437\u0430\u043d\u044f\u0442\u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u0431\u0435\u0437 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f141\u0437\u0430\u043d\u044f\u0442gpg-agent141\u0437\u0430\u043d\u044f\u0442start-stop-daemon &#8212;background501\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d\u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork + closerange505\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043dssh-agent505\u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d\u0423 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u0434\u0432\u0430 \u0438\u0441\u0445\u043e\u0434\u0430. \u041f\u043e\u0442\u043e\u043c\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u0441\u044a\u0435\u0434\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0438, \u0438 cron \u0432\u0438\u0434\u0438\u0442 \u044d\u0442\u043e \u043a\u0430\u043a \u00ab\u0443\u0436\u0435 \u0438\u0434\u0451\u0442\u00bb. \u041f\u043e\u0442\u043e\u043c\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u043b, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0422\u043e\u043b\u044c\u043a\u043e start-stop-daemon \u043d\u0435 \u0440\u0430\u0437\u043c\u043d\u043e\u0436\u0438\u043b\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u0438 \u0436\u0438\u0432\u043e\u043c PID \u0438\u0437 pidfile. \u0422\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0434\u0435\u0441\u044c \u043d\u0438 \u043f\u0440\u0438 \u0447\u0451\u043c. \u041e\u0431\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0432\u043e \u0432\u0441\u0435\u0445 \u0448\u0435\u0441\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0432\u0435\u0440\u043d\u0443\u043b 124, \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u043d\u0443\u043b\u0438 1 \u043e\u0442 flock -n. \u041f\u043e \u043a\u043e\u0434\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0435 \u0443\u0433\u0430\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435: \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0438 \u0438\u043b\u0438 \u0443\u0442\u0435\u0447\u043a\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432.\u0427\u0442\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u043e lock\u0424\u043b\u0430\u0433\u0438 timeout \u0442\u0443\u0442 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442. \u041d\u0430 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435 \u0438\u0437 \u0442\u0440\u0451\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \u0441 \u0442\u0435\u043c \u0436\u0435 lock (\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0444\u043e\u043d\u043e\u0432\u044b\u0439, \u043f\u043e\u0441\u043b\u0435 setsid, \u0441 trap &#187; TERM) \u044f \u043f\u0440\u043e\u0433\u043d\u0430\u043b timeout 2, &#8212;foreground \u0438 -k 1 2: setsid-\u043f\u043e\u0442\u043e\u043c\u043a\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u043b \u043d\u0438 \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442, lock \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u0437\u0430\u043d\u044f\u0442 \u0432\u043e \u0432\u0441\u0435\u0445 15 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445.subprocess.run(timeout=2) \u0443\u0431\u0438\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0440\u0435\u0431\u0451\u043d\u043a\u0430, Popen \u0441 os.killpg \u2014 \u0432\u0441\u0435\u0445, \u043a\u0440\u043e\u043c\u0435 setsid-\u043f\u043e\u0442\u043e\u043c\u043a\u0430.\u0411\u0435\u0437 cgroup \u0432\u0441\u0451 \u0434\u0435\u0440\u0435\u0432\u043e \u0437\u0430\u043a\u0440\u044b\u043b \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u041e\u0431\u0451\u0440\u0442\u043a\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0431\u044f subreaper \u0447\u0435\u0440\u0435\u0437 prctl(PR_SET_CHILD_SUBREAPER), \u0438 \u043e\u0441\u0438\u0440\u043e\u0442\u0435\u0432\u0448\u0438\u0435 \u043f\u043e\u0442\u043e\u043c\u043a\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u0432\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u043d\u0435\u0439 \u0432\u043c\u0435\u0441\u0442\u043e PID 1. \u041f\u043e\u0441\u043b\u0435 killpg \u043e\u043d\u0430 \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \/proc, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u0447\u0438\u0441\u043b\u0438\u0442\u0441\u044f \u0435\u0451 \u043f\u043e\u0442\u043e\u043c\u043a\u0430\u043c\u0438, \u0438 \u0448\u043b\u0451\u0442 \u0438\u043c KILL:PR_SET_CHILD_SUBREAPER = 36ctypes.CDLL(None, use_errno=True).prctl(PR_SET_CHILD_SUBREAPER, 1, 0, 0, 0)p = subprocess.Popen(cmd, start_new_session=True)try:    p.wait(timeout=2)except subprocess.TimeoutExpired:    os.killpg(p.pid, signal.SIGTERM)    &#8230;                                   # \u0436\u0434\u0451\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0437\u0430\u0442\u0435\u043c killpg KILL    while left := descendants(os.getpid()):   # \u043e\u0431\u0445\u043e\u0434 \/proc \u043f\u043e ppid        for pid in left:            os.kill(pid, signal.SIGKILL)        &#8230;                                   # \u043f\u043e\u0436\u0430\u0442\u044c \u0437\u043e\u043c\u0431\u0438 \u0447\u0435\u0440\u0435\u0437 waitpid(-1, WNOHANG)\u041d\u0430 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0434\u0435\u0440\u0435\u0432\u0435 \u044d\u0442\u043e \u0437\u0430\u043d\u044f\u043b\u043e 2,05 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0432\u043c\u0435\u0441\u0442\u043e 2,00, setsid-\u043f\u043e\u0442\u043e\u043c\u043e\u043a \u0443\u0431\u0438\u0442, lock \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d. \u041d\u0430 \u0434\u0435\u043c\u043e\u043d\u0430\u0445 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044f subreaper \u043d\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u043b; \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0442\u043e\u0442 \u0436\u0435 (\u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u043e\u0442\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u043e\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f), \u043d\u043e \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0437\u0430\u043c\u0435\u0440\u0430 \u043d\u0435\u0442. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0443\u0442\u044c \u2014 cgroup, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 systemd \u0441 KillMode=control-group: \u0438\u0437 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0443\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 setsid, \u0430 cgroup \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0430\u043a \u043d\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u0435\u0442. \u0412 \u043c\u043e\u0451\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \/sys\/fs\/cgroup \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0434\u043e\u0447\u0435\u0440\u043d\u044e\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 cgroup.kill \u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b.\u0427\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442\u0414\u0435\u043c\u043e\u043d, \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 timeout, \u0438 subprocess.run, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0437\u0430\u043a\u0440\u044b\u043b \u043b\u0438 \u043e\u043d \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0441 lock. \u0417\u0430\u043a\u0440\u044b\u043b \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0438 \u0438\u0434\u0443\u0442, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u043e\u043b\u044c\u0448\u0435, \u0435\u0441\u043b\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0441\u0430\u043c\u0430 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430, \u043a\u0430\u043a start-stop-daemon \u0441 pidfile. \u041d\u0435 \u0437\u0430\u043a\u0440\u044b\u043b \u2014 cron \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0438, \u043f\u043e\u043a\u0430 \u0434\u0435\u043c\u043e\u043d \u0436\u0438\u0432. \u041e\u0431\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435: 124 \u0438\u043b\u0438 TimeoutExpired.\u0427\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043b\u0438 \u0432\u0430\u0448\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0441 lock: gpg-agent, setsid -f \u0438 \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 fork \u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0438 \u0434\u0435\u0440\u0436\u0430\u0442 lock, ssh-agent, start-stop-daemon \u0438 fork \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u2014 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442.\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e (9&gt;&amp;- \u0434\u043b\u044f \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043c\u043a\u0430 \u0438\u043b\u0438 flock -o) \u043c\u043e\u0436\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0451\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0432\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a. \u041d\u0430 \u0441\u0442\u0435\u043d\u0434\u0435 \u0441 flock -o \u0432\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b, \u043f\u043e\u043a\u0430 \u043f\u043e\u0442\u043e\u043c\u043a\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0435\u0449\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438: \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u043e\u043d\u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 60 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0415\u0441\u043b\u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0448\u0451\u043b \u0432 \u0441\u0432\u043e\u044e \u0441\u0435\u0441\u0441\u0438\u044e \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0440\u0435\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043d\u0443\u0436\u0435\u043d subreaper \u0438\u043b\u0438 cgroup, \u043e\u0431\u0451\u0440\u0442\u043a\u0430 \u0441 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442.\u041e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435: \u0431\u043b\u043e\u043a\u0438 \u0441 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u043c\u0438 \u2014 \u043e\u0431\u0440\u0430\u0437 python:3.15 (Debian 13), Python 3.15.1, GNU coreutils timeout 9.7, gpg-agent 2.4.7, start-stop-daemon 1.22.22, OpenSSH 10.0p1; \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u2014 python:3.15-slim, Python 3.15.0, bash 5.2.37, util-linux flock 2.41.5. \u041c\u0430\u043d\u0443\u0430\u043b timeout \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 GNU \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 9.12, \u043b\u043e\u0433\u0438\u043a\u0443 \u0433\u0440\u0443\u043f\u043f\u044b \u0438 -k \u044f \u0441\u0432\u0435\u0440\u044f\u043b \u043f\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 src\/timeout.c.\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 https:\/\/habr.com\/ru\/articles\/1099830\/<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-500423","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=500423"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500423\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=500423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=500423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=500423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}