{"id":329558,"date":"2022-02-14T15:02:26","date_gmt":"2022-02-14T15:02:26","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=329558"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=329558","title":{"rendered":"<span>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u0432\u0438\u043b\u043a\u043e\u0439<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>&#8230;\u0438\u043b\u0438 \u043e fork() \u0432 \u0434\u0432\u0443\u0445 \u0441\u043b\u043e\u0432\u0430\u0445.<\/p>\n<h3>\u041a\u0430\u043a \u043b\u044e\u0434\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438<\/h3>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435. \u041b\u044e\u0434\u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u043b\u0438\u0431\u043e \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430\u00b9; \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043e\u043f\u044b\u0442\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043b\u044e\u0434\u0435\u0439\u00b2 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u044f\u0441\u044c \u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438\u00b3. \u0418 \u0441\u0430\u043c\u043e\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435, \u0447\u0442\u043e \u043c\u0438\u0440 \u043d\u0435 \u0432\u0437\u043e\u0440\u0432\u0430\u043b\u0441\u044f, \u043d\u0438\u043a\u0442\u043e (\u043c\u0430\u0441\u0441\u043e\u0432\u043e) \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0443\u043c\u0435\u0440, \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0434\u0435\u043d\u044c\u0433\u0438.<\/p>\n<p>\u00b9 <em>&#171;\u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0430\u043a \u043f\u0438\u0448\u0443 \u043a\u043e\u0434, \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0443\u043c\u0435\u0440&#187;<\/em> <br \/>\u00b2 <em>&#171;\u043a\u043e\u043f\u0438\u0440\u0443\u044e \u043a\u043e\u0434 \u0438\u0437 stack overflow \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0431\u0440\u0430\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0445 \u043f\u043b\u044e\u0441\u043e\u0432&#187;<\/em> <br \/>\u00b3 <em>&#171;\u043a\u043e\u043f\u0438\u0440\u0443\u044e \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u043a\u043e\u0434 \u0438\u0437 stack overflow&#187;<\/em><\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 &#8212; \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439. \u0414\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0439 \u0437\u0430\u043f\u043b\u044e\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0448\u0438\u0431\u0430\u0442\u044c\u0441\u044f, \u043d\u043e \u0432\u0435\u0434\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043b\u044e\u0434\u0435\u0439 \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0440\u0438\u0432\u0438\u0432\u043a\u0438 \u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043b\u044e\u0434\u0435\u0439 \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0440\u0438\u0432\u0438\u0432\u043a\u0438 \u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0433\u0440\u0443\u043f\u043f, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0438, \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043e\u0442\u0432\u043b\u0435\u043a\u043b\u0438\u0441\u044c. \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0443:<\/p>\n<blockquote>\n<p><strong>\u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443.<\/strong><\/p>\n<\/blockquote>\n<p>\u041d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u043e, \u0437\u0430\u0447\u0435\u043c. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a \u0438\u0433\u0440\u044b \u0438\u0437 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430, \u0437\u0430\u043f\u0443\u0441\u043a \u0443\u0442\u0438\u043b\u0438\u0442\u044b ping \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 ICMP-\u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e \u043a\u043b\u0438\u043a\u0443 \u043d\u0430 \u044f\u0440\u043b\u044b\u043a, \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0432\u044b \u0441\u0430\u043c\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0437 \u0432 \u0436\u0438\u0437\u043d\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c, \u044d\u0442\u043e \u041a\u0430\u0440\u0442\u043e\u0448\u043a\u0430. \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0438\u043b\u043a\u043e\u0439: <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/webt\/kc\/ie\/dy\/kciedynozconxzaimck1yvzda4u.png\" data-width=\"512\"\/><figcaption><\/figcaption><\/figure>\n<h4>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/h4>\n<ol>\n<li>\n<p><strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0432\u0438\u043b\u043a\u043e\u0439?<br \/><\/strong><em>\u041e\u0431\u0449\u0438\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043f\u043e\u0434 LINUX-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u043a\u043e\u0440\u043e\u0432\u0443 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u0438\u043b\u043a\u0430?<br \/><\/strong><em>Copy-on-write, \u0447\u0442\u043e \u044d\u0442\u043e \u0438 \u0437\u0430\u0447\u0435\u043c? vfork \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u043d\u0435 \u043b\u0443\u0447\u0448\u0435<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u0438\u043a\u0440\u0443?<br \/><\/strong><em>posix_spawn \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u043d\u0435 \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u0442 fork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u044e\u0442 \u043a\u043b\u043e\u043d\u044b?<br \/><\/strong><em>clone() \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0443 fork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u0433\u0434\u0430 \u0435\u0448\u044c \u0441\u0443\u043f \u0432\u0438\u043b\u043a\u043e\u0439 \u043e\u043d \u0443\u0442\u0435\u043a\u0430\u0435\u0442?<br \/><\/strong><em>\u0423\u0442\u0435\u0447\u043a\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 fork() \u0438 \u043a\u0430\u043a \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0443 \u0432\u0438\u043b\u043a\u0438 \u0442\u0440\u0438 \u0437\u0443\u0431\u0430?<br \/><\/strong><em>\u0412\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 fork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u0434\u0435\u043c\u043e\u043d\u043e\u0432 \u0432\u0438\u043b\u043a\u043e\u0439?<br \/><\/strong><em>\u0417\u0430\u043f\u0443\u0441\u043a \u0434\u0435\u043c\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 fork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0438\u043b\u043a\u043e\u0439 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0442\u0430\u0440\u0435\u043b\u043a\u0443?<br \/><\/strong><em>\u041f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0442\u044c \u0432\u0438\u043b\u043a\u0435?<br \/><\/strong><em>\u0412\u0437\u0430\u0438\u043c\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 fork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0438\u043b\u043a\u043e\u0439 \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u043c\u0430\u043b\u0430\u0441\u044c \u0440\u0443\u0447\u043a\u0430?<br \/><\/strong><em>\u0421\u0430\u043c\u043e\u043b\u0438\u043a\u0432\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u043e\u0433\u043e<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0432\u0438\u043b\u043a\u0438?<br \/><\/strong><em>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f pthread_atfork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043f\u043e\u0446\u0430\u0440\u0430\u043f\u0430\u0442\u044c \u043e\u043a\u043d\u043e \u0432\u0438\u043b\u043a\u043e\u0439?<br \/><\/strong><em>\u0417\u0430\u043f\u0443\u0441\u043a \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0434 Windows-\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0438\u043b\u043a\u043e\u0439?<br \/><\/strong><em>\u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u0430\u043c \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f system()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<br \/><\/strong><em>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b<\/em><\/p>\n<\/li>\n<\/ol>\n<h4>\u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/h4>\n<p>\u0412\u043e\u0439\u0434\u0435\u043c \u0432 <a href=\"https:\/\/stackoverflow.com\/questions\/5460421\/how-do-you-write-a-c-program-to-execute-another-program\/5460448\" rel=\"noopener noreferrer nofollow\">hivemind<\/a> \u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441 &#171;\u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438\u0437 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b?&#187;. \u0418, \u043e \u0447\u0443\u0434\u043e, \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u0438\u0434\u0438\u043c \u043e\u0442\u0432\u0435\u0442 (\u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0446\u0435\u043d\u043e\u043a):<\/p>\n<pre><code class=\"cpp\">#include &lt;stdio.h> #include &lt;stdlib.h> #include &lt;unistd.h> \/* for fork *\/ #include &lt;sys\/types.h> \/* for pid_t *\/ #include &lt;sys\/wait.h> \/* for wait *\/  int startup() {     \/*Spawn a child to run the program.*\/     pid_t pid=fork();     if (pid==0) { \/* child process *\/         static char *argv[]={\"echo\",\"Foo is my name.\",NULL};         execv(\"\/bin\/echo\",argv);         exit(127); \/* only if execv fails *\/     }     else { \/* pid!=0; parent process *\/         waitpid(pid,0,0); \/* wait for child to exit *\/     }     return 0; } <\/code><\/pre>\n<p>\u041d\u0443, \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043c\u0435\u043d\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0441\u0430\u043c\u0443\u044e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0442\u043e \u0442\u0430\u043a (\u043d\u0435\u0442, \u043d\u0443 \u0432\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c (\u0432\u0440\u043e\u0434\u0435 cygwin \u0438\u043b\u0438 WSL) \u0438 &#171;\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434):<\/p>\n<pre><code class=\"cpp\">#include &lt;Windows.h>  void startup(LPCSTR lpApplicationName) {     \/\/ additional information     STARTUPINFOA si;     PROCESS_INFORMATION pi;      \/\/ set the size of the structures     ZeroMemory(&amp;si, sizeof(si));     si.cb = sizeof(si);     ZeroMemory(&amp;pi, sizeof(pi));      \/\/ start the program up     CreateProcessA     (         lpApplicationName,   \/\/ the path         argv[1],             \/\/ Command line         NULL,                \/\/ Process handle not inheritable         NULL,                \/\/ Thread handle not inheritable         FALSE,               \/\/ Set handle inheritance to FALSE         CREATE_NEW_CONSOLE,  \/\/ Opens file in a separate console         NULL,                \/\/ Use parent's environment block         NULL,                \/\/ Use parent's starting directory          &amp;si,                 \/\/ Pointer to STARTUPINFO structure         &amp;pi                  \/\/ Pointer to PROCESS_INFORMATION structure     );         \/\/ Close process and thread handles.          CloseHandle(pi.hProcess);         CloseHandle(pi.hThread); } <\/code><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e, \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043b\u044e\u0441\u043e\u0432.<\/p>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u044f (\u0438\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430\u0443\u0433\u0430\u0434) \u0431\u0443\u0434\u0435\u0442<\/p>\n<pre><code class=\"cpp\">int result = system(\"C:\\\\Program Files\\\\Program.exe\"); <\/code><\/pre>\n<p>&#8230;\u0447\u0442\u043e \u0432\u0435\u0440\u043d\u043e \u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u00b9. <br \/>\u00b9\u041e\u043f\u0443\u0441\u0442\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0448\u0435\u0439.<\/p>\n<p>\u041d\u043e \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u044f \u0441\u043a\u0430\u0436\u0443 \u0432\u0430\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0435\u0440\u043d\u044b\u043c\u0438?<\/p>\n<h3>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0432\u0438\u043b\u043a\u043e\u0439?<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Linux \u0441\u0438\u0441\u0442\u0435\u043c. \u0415\u0441\u043b\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0443\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u0441\u0442\u044b\u043b\u0438, \u0442\u043e \u043e\u043d\u043e \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (fork).<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u043d\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 (exec).<\/p>\n<\/li>\n<\/ol>\n<p>&#171;\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430&#187; \u0437\u0432\u0443\u0447\u0438\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043a\u0443 \u0432\u0438\u043b\u043a\u0438 \u043c\u044b \u0431\u044b \u043e\u0442\u0437\u0435\u0440\u043a\u0430\u043b\u0438\u043b\u0438 \u043f\u0435\u0440\u0432\u0443\u044e, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u0442\u0435\u0440\u043b\u0438 \u0435\u0451 \u0438 \u043d\u0430 \u0435\u0451 \u043c\u0435\u0441\u0442\u0435 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u0440\u0443\u0447\u043a\u0443.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/webt\/tz\/rt\/va\/tzrtvajny4xb2hwspmdf9fwmgxo.png\" data-width=\"512\"\/><figcaption><\/figcaption><\/figure>\n<pre><code>The child process is created  with  a  single  thread\u2014the  one  that called  fork().   The  entire virtual address space of the parent is replicated in the child, including the states of mutexes,  condition variables,  and other pthreads objects; the use of pthread_atfork(3) may be helpful for dealing with problems that this can cause.         (man 2 fork) <\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u044f\u0434\u0440\u0443 &#171;<em>\u044d\u0439 \u0442\u044b, \u0437\u0430\u043f\u0443\u0441\u0442\u0438 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438 \u0434\u0430\u0439 \u043c\u043d\u0435 \u0435\u0433\u043e ID<\/em>&#171;, \u0432\u0435\u0434\u044c \u0442\u0430\u043a \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u043c\u043d\u043e\u0433\u043e &#171;\u0434\u0435\u0448\u0435\u0432\u043b\u0435&#187;, \u0447\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043c\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435. \u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0447\u0435\u043d\u044c <a href=\"https:\/\/www.bell-labs.com\/usr\/dmr\/www\/hist.html\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0441\u0442<\/a>:<\/p>\n<blockquote>\n<p>\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 (\u0434\u043e fork()) \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430\\\u0432\u044b\u0432\u043e\u0434\u0430, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0430 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043c\u0435\u0449\u0430\u043b\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438. \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b exit() \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0448\u0430\u0433\u0443, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438. <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445, \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438 fork(), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0438\u043c\u0435\u0432\u0448\u0438\u0439\u0441\u044f \u043a\u043e\u0434 \u0437\u0430\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u0442\u043e\u043e, \u0447\u0442\u043e \u043f\u043e\u0437\u0436\u0435 \u0441\u0442\u0430\u043b\u043e exec()). \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u0432 27 \u0441\u0442\u0440\u043e\u043a \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 fork() \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 (\u0441\u043c. \u0433\u043b\u0430\u0432\u0443  <strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u043a\u043e\u0440\u043e\u0432\u0443 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u0438\u043b\u043a\u0430?<\/strong>) \u043f\u0430\u043c\u044f\u0442\u044c \u0440\u043e\u0434\u0438\u0442\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u00b9.<\/p>\n<\/blockquote>\n<p>\u00b9\u0410 \u0442\u0430\u043a \u043a\u0430\u043a \u0432 UNIX &#171;\u0432\u0441\u0451 \u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b&#187; \u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f &#171;\u0444\u0430\u0439\u043b\u043e\u0432&#187;, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B9_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443, \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441 \u0431\u0438\u0442\u043e\u043c subreaper, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0444\u043b\u0430\u0433\u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432, \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0435\u0449\u0435 \u0434\u0435\u0441\u044f\u0442\u043e\u043a &#171;\u043d\u0443 \u0442\u043e\u0447\u043d\u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 NULL&#187;?<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u0438.<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0434 Windows \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/processthreadsapi\/nf-processthreadsapi-createprocessa\" rel=\"noopener noreferrer nofollow\">CreateProcess<\/a>  \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 9 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 4 &#8212; \u044d\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, 1 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u043e\u043a \u0438 1 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043c\u0430\u0441\u043a\u0443. \u0418 \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e? \u042d\u0442\u043e\u0433\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0412 Linux (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u0432 UNIX) \u0442\u0430\u043a\u043e\u0439 <a href=\"https:\/\/man7.org\/linux\/man-pages\/man2\/clone.2.html\" rel=\"noopener noreferrer nofollow\">\u0432\u044b\u0437\u043e\u0432<\/a> \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0438 \u043c\u044b \u0435\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u043a\u043e\u043b\u043e \u0441\u043e\u0442\u043d\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0447\u0442\u043e \u0447\u0435\u0440\u0435\u0437 10-20-30-40 \u043b\u0435\u0442 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u0440\u043e\u0432\u044c \u0438\u0437 \u043d\u043e\u0441\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0438 \u0437\u0432\u0443\u0447\u0438\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0434\u0430\u0436\u0435 \u0432 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u0438 &#171;\u0441\u043d\u043e\u0441\u043e\u043a&#187;.<\/p>\n<h3>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u043a\u043e\u0440\u043e\u0432\u0443 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u0438\u043b\u043a\u0430?<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/webt\/um\/-r\/mc\/um-rmcv-pvdvstztl-eh_wyytds.png\" data-width=\"512\"\/><figcaption><\/figcaption><\/figure>\n<p>CoW (\u0438\u043b\u0438 Copy-on-Write) &#8212; \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043a \u0432\u044b\u0437\u043e\u0432\u0443 fork(). \u0415\u0433\u043e \u0441\u0443\u0442\u044c \u0442\u0430\u043a\u043e\u0432\u0430, \u0447\u0442\u043e \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b (<em>write<\/em>) \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b (<em>copy<\/em>). \u0415\u0441\u043b\u0438 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u043e \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u043f\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. <\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0430\u043c \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 (\u043d\u0435-)\u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0435\u043c\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430, \u0430 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0445\u043e\u0447\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c) \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0432\u0448\u0435\u043c\u0443 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D1%82%D0%BA%D0%B0%D0%B7_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043a\u0430\u0437\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/a>  (\u0441\u043c. \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432 &#171;\u043b\u0435\u0433\u043a\u043e\u043c&#187; \u043e\u0442\u043a\u0430\u0437\u0435):<\/p>\n<blockquote>\n<p>\u041e\u0442\u043a\u0430\u0437 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445: <br \/>* \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c).<\/p>\n<\/blockquote>\n<p>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c? \u041e\u0442\u0432\u0435\u0442 \u043f\u0440\u043e\u0441\u0442 \u0434\u043e \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 &#8212; \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f fork() \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u044f\u043b\u0430\u0441\u044c \u0432 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430\u0445, \u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u043f\u0430\u043c\u044f\u0442\u0438 &#8212; (\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e) \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432 1969\u043c.  \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0441\u043e\u0442\u043d\u044f\u043c\u0438 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442 \u0438 \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u044d\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u043e \u0431\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u0430\u043c\u043e\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442<\/p>\n<\/th>\n<th>\n<p>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 (MHz)<\/p>\n<\/th>\n<th>\n<p>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 (GB\/s)\u00b9<\/p>\n<\/th>\n<th>\n<p>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0434\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c 150 GB<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p>DDR4<\/p>\n<\/td>\n<td>\n<p>2133<\/p>\n<\/td>\n<td>\n<p>17<\/p>\n<\/td>\n<td>\n<p>8.8 c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<p>2400<\/p>\n<\/td>\n<td>\n<p>19.2<\/p>\n<\/td>\n<td>\n<p>7.8 c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<p>2666<\/p>\n<\/td>\n<td>\n<p>21.3<\/p>\n<\/td>\n<td>\n<p>7.0 c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<p>3000<\/p>\n<\/td>\n<td>\n<p>25.6<\/p>\n<\/td>\n<td>\n<p>5.8 c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>DDR5<\/p>\n<\/td>\n<td>\n<p><a href=\"https:\/\/www.techtimes.com\/articles\/264440\/20210822\/samsung-ddr5-ram-7200-mhz.htm\" rel=\"noopener noreferrer nofollow\">7200<\/a><\/p>\n<\/td>\n<td>\n<p>51.2<\/p>\n<\/td>\n<td>\n<p>2.9 c<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u00b9 <em>\u041f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0447\u0442\u043e \u0432\u044b \u0442\u0430\u043c \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442, \u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0437\u0430\u044f\u0432\u0438\u043b \u0447\u0435\u0441\u0442\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.<\/em><\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f &#8212; vfork(). \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 vfork \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0438\u0442\u044c \u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0443\u0434\u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 &#171;\u043f\u0440\u043e\u0446\u0435\u0441\u0441&#187; \u043d\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 execve, _exit \u0438\u043b\u0438 \u043d\u0435 \u0443\u043f\u0430\u0434\u0435\u0442, \u0443\u0431\u0438\u0442\u044b\u0439 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0430\u043c\u044f\u0442\u044c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0441\u0442\u044c &#8212; \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u0443\u0447\u0435\u0439 \u0438 \u0441\u0442\u0435\u043a\u043e\u043c. \u0412 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u043e \u0432\u044b\u0437\u0432\u0430\u043b\u043e \u0440\u0430\u0437\u043b\u0430\u0434 \u0432 BSD \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435, \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u0447\u0438\u0442\u0430\u043b\u0430 vfork \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u043c \u043f\u0440\u043e\u0432\u0430\u043b\u043e\u043c, \u0447\u0430\u0441\u0442\u044c &#8212; \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e \u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p>\u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f CoW \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u043e\u0442 vfork \u0441\u0442\u0430\u043b \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0447\u0442\u043e \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f &#8212; \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 CoW \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0438\u0437-\u0437\u0430 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 MIPS CPU \u0431\u0435\u0437 MMU).<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Java 7 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 vfork(), \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0444\u043b\u0430\u0433\u0435 <a href=\"http:\/\/tolstiyman.blogspot.com\/2013\/08\/overcommit.html\" rel=\"noopener noreferrer nofollow\">overcommit = 2<\/a> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0433\u043b\u043e <a href=\"https:\/\/stackoverflow.com\/questions\/15608347\/fork-failing-with-out-of-memory-error\" rel=\"noopener noreferrer nofollow\">\u0441\u0432\u0430\u043b\u0438\u0442\u044c\u0441\u044f<\/a> \u0441 Out-of-Memory, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439.<\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f Java \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <a href=\"https:\/\/github.com\/openjdk\/jdk\/blob\/master\/src\/java.base\/unix\/native\/libjava\/ProcessImpl_md.c#L120\" rel=\"noopener noreferrer nofollow\">posix_spawn()<\/a>, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0435\u0449\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"206\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a0c\/10b\/d8b\/a0c10bd8bfcc0ab9378f346e14c78528.png\" data-width=\"774\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u0438\u043a\u0440\u0443?<\/h3>\n<p>\u0427\u0443\u0442\u044c \u0432\u044b\u0448\u0435 \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>posix_spawn<\/code>, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<pre><code>       int posix_spawn(pid_t *pid, const char *path,                        const posix_spawn_file_actions_t *file_actions,                        const posix_spawnattr_t *attrp,                        char *const argv[], char *const envp[]);         int posix_spawnp(pid_t *pid, const char *file,                        const posix_spawn_file_actions_t *file_actions,                        const posix_spawnattr_t *attrp,                        char *const argv[], char *const envp[]); <\/code><\/pre>\n<p>\u0421\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u0435\u0437 MMU \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c \u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u041f\u0440\u044f\u043c\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a fork() + exec() \u0442\u0430\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0438\u0437-\u0437\u0430 \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435\u043c CoW, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 C \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0432\u0441\u0435\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0431\u044b\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. <\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e glibc (\u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c C) \u0432\u0435\u0440\u0441\u0438\u0438 2.4 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u043b posix_spawn \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 fork() + exec(), \u0438\u043c\u0435\u044f, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 &#171;\u0434\u043b\u044f \u0433\u0430\u043b\u043e\u0447\u043a\u0438&#187;. \u0417\u0430\u0442\u0435\u043c, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043b\u043e\u043c\u0430\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d GNU-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439 \u0444\u043b\u0430\u0433 POSIX_SPAWN_USEVFORK, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u043e\u0440\u0441\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 vfork \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u043d\u043e \u043c\u044b \u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c). <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 glibc 2.24 posix_spawn \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 clone \u0441 \u0444\u043b\u0430\u0433\u043e\u043c <code>CLONE_VFORK<\/code> + exec \u0432\u0441\u0435\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c. \u0422\u0430\u043a\u0436\u0435 posix_spawn \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 vfork) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u0434\u043b\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430 \u043f\u0440\u0438 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u044f\u0445 \u0441 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0433\u043b\u0430\u0432\u0435 &#171;<strong>\u043a\u0430\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0442\u044c \u0432\u0438\u043b\u043a\u0435?&#187;<\/strong>.<\/p>\n<h3>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u044e\u0442 \u043a\u043b\u043e\u043d\u044b?<\/h3>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438 (fork, vfork \u0438 posix_spawn) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439 \u043d\u0430\u0434 \u043e\u0434\u043d\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>clone<\/code>.<\/p>\n<pre><code class=\"cpp\">int clone(     int (*fn)(void *),      void *stack,      int flags,      void *arg,      ...     \/\/ pid_t *parent_tid,      \/\/ void * tls,      \/\/ pid_t *child_tid ); <\/code><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/webt\/0o\/ec\/n3\/0oecn3j77u0xnjvpktehq4rtxre.png\" data-width=\"512\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u0430\u043a \u0432 CreateProcess, \u043d\u043e \u0442\u043e\u0436\u0435 \u043d\u0435\u043c\u0430\u043b\u043e. \u041f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 clone \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u043e\u0442 \u0442\u0430\u043a (<em>\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0430\u0432\u0442\u043e\u0440 \u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438<\/em>):<\/p>\n<pre><code class=\"cpp\">char * stack = mmap(     NULL,                   \/\/ \u0421\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 (\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f)     STACK_SIZE,             \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0435\u043a\u0430     PROT_READ | PROT_WRITE, \/\/ \u041f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446     MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK,           \/\/ \u041f\u0440\u0438\u0432\u0430\u0442\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c, \u0431\u0435\u0437 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f           \/\/ \u043d\u0430 \u0444\u0430\u0439\u043b, \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441\u0442\u0435\u043a\u0430     -1,  \/\/ \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0444\u0430\u0439\u043b - \u043d\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430     0    \/\/ \u041d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c, \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0441\u0434\u0432\u0438\u0433 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 );  char * stacktop = stack + STACK_SIZE;      \/\/ \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0435\u043a \u0440\u0430\u0441\u0442\u0435\u0442 \u0432\u043d\u0438\u0437 (\u043e\u0431\u044b\u0447\u043d\u043e),      \/\/ \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0433\u043e\u043b\u043e\u0432\u0443 \u0441\u0442\u0435\u043a\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 int flags = CLONE_FS; \/\/ \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0435\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435  clone(     func,     \/\/ \u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441     stacktop, \/\/ \u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u0441\u0442\u0435\u043a\u0430     flags,    \/\/ \u0424\u043b\u0430\u0433\u0438     NULL      \/\/ \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 ); <\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 void * ptr. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043a\u0430\u043a \u0432 pthread_create. \u0414\u0430, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e pthread_create \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<pre><code class=\"cpp\">#include &lt;pthread.h>  void * _thread(void * ptr) {     int * pint = ptr;     *pint = 5;          pthread_exit(NULL); }  int main(void) {     int val = 4;          pthread_t thread;     pthread_create(&amp;thread, NULL, _thread, &amp;val);     pthread_join(thread, NULL);          return val; } <\/code><\/pre>\n<pre><code>$ gcc pthread.c -o pthread.elf -lpthread &amp;&amp; strace .\/pthread.elf 2>&amp;1 | grep clone clone(child_stack=0x7ff8905a6fb0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7ff8905a79d0, tls=0x7ff8905a7700, child_tidptr=0x7ff8905a79d0) = 7418 <\/code><\/pre>\n<p>\u041a\u0430\u043a \u0438\u0442\u043e\u0433 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e <code>clone()<\/code>, \u044f\u0432\u043b\u044f\u044f\u0441\u044c \u0441\u0430\u043c\u044b\u043c \u043e\u0431\u0449\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0442\u043e\u043d\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0441\u0435 \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0443\u0431\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 &#8212; \u043e\u0431\u0449\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0438 \u0434\u0430\u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0430\u043c \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445, \u0433\u0434\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u0442 \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e CoW, \u0434\u0430\u0436\u0435 vfork() \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0442\u0438, \u044f\u0432\u043b\u044f\u044f\u0441\u044c, \u043f\u043e \u0441\u0443\u0442\u0438, \u043f\u0440\u0435\u0434\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c clone().<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u0433\u0434\u0430 \u0435\u0448\u044c \u0441\u0443\u043f \u0432\u0438\u043b\u043a\u043e\u0439 \u043e\u043d \u0443\u0442\u0435\u043a\u0430\u0435\u0442?<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/webt\/yx\/dh\/k2\/yxdhk2ujna3w0r98zmo-ritlspc.png\" data-width=\"512\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f fork. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d, \u0434\u0430 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0440\u0430 \u0443\u0437\u043d\u0430\u0442\u044c \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0435\u0441\u043b\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0431\u0435\u0437\u0434\u0443\u043c\u043d\u043e.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443:<\/p>\n<pre><code class=\"cpp\">\/\/ prog1.c  #include &lt;sys\/types.h> #include &lt;sys\/stat.h> #include &lt;sys\/wait.h> #include &lt;fcntl.h> #include &lt;unistd.h> #include &lt;stdio.h> #include &lt;stdlib.h>  int main(void) {     int f = open(\"\/etc\/passwd\", O_RDONLY);          switch (fork()) {         case -1: _exit(EXIT_FAILURE);         case 0 : {             static char * argv[] = { \".\/prog2.elf\", NULL };             execv(\".\/prog2.elf\", argv);             exit(127);         }         default:             close(f);             wait(NULL);     }          return EXIT_SUCCESS; } <\/code><\/pre>\n<pre><code class=\"cpp\">\/\/ prog2.c  #include &lt;unistd.h> #include &lt;stdio.h> #include &lt;stdlib.h>  int main(void) {     int fd = 3;     char buff[128] = { 0 };          read(fd, buff, sizeof(buff) - 1);     puts(buff);          return EXIT_SUCCESS; } <\/code><\/pre>\n<pre><code>$ .\/prog1.elf  root:x:0:0:root:\/root:\/bin\/bash daemon:x:1:1:daemon:\/usr\/sbin:\/usr\/sbin\/nologin bin:x:2:2:bin:\/bin:\/usr\/sbin\/nologin sys:x:3:3: <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0442\u043a\u0440\u044b\u043b \u0444\u0430\u0439\u043b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0435\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0440\u0430\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 &#171;\u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u044b\u0439 \u043d\u043e\u043c\u0435\u0440&#187;, \u0442\u043e \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 3. (\u041f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e 0..2 \u0437\u0430\u043d\u044f\u0442\u044b stdin\/out\/err)<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043a\u043e\u043f\u0438\u044e \u0432\u0441\u0435\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0420\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043a\u0440\u044b\u043b \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a (<strong>\u0432\u0441\u0451 \u0435\u0449\u0451 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c\u0443<\/strong>\u00b9) \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0443 #3 \u0438 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<\/ol>\n<p>\u00b9 \u0412\u0441\u0451 \u0435\u0449\u0435 \u043e\u0442\u043a\u0440\u044b\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u043b\u0430\u0433\u0430 CLONE_FILES, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e &#171;\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e clone.<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0432\u0430\u0436\u043d\u043e, \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043b\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c CoW \u0438\u043b\u0438 \u043d\u0435\u0442, \u043d\u0430\u043c \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430\u0434\u0443\u0442 \u0432 \u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 UNIX-like \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f &#171;\u0432\u0441\u0451 \u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b&#187; \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b (\u0447\u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e) &#8212; \u0444\u0430\u0439\u043b\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0447\u0442\u043e \u043c\u0435\u043d\u0435\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c) &#8212; \u0442\u043e\u0436\u0435 \u0444\u0430\u0439\u043b\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u044f\u0434\u0440\u0435 (?) &#8212; \u0444\u0430\u0439\u043b\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 (???) &#8212; \u0444\u0430\u0439\u043b\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u044f\u0434\u0440\u0430 (????) &#8212; \u0444\u0430\u0439\u043b\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0418 \u0434\u0430\u0436\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0441\u043e\u043a\u0435\u0442\u044b (!!!) &#8212; \u0442\u043e\u0436\u0435 \u0444\u0430\u0439\u043b\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e \u0431\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438 \u043a\u0430\u043a \u0431\u044b \u043d\u0438 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 fork &#8212; \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0443\u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430\u043c\u0438. \u0410 \u0432\u044b, \u0432\u0435\u0434\u044c, \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u0432\u0430\u0432 &#171;\u0437\u0430\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u0439&#187; ping \u0432 \u0442\u043e\u0440\u0433\u043e\u0432\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u0440\u0430\u0441\u0441\u044b\u043b\u0430\u0442\u044c \u043f\u043e \u0441\u0435\u0442\u0438 \u0432\u0440\u0430\u0436\u0434\u0435\u0431\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043b\u0438 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0437 \u0441\u0435\u0431\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Man-in-the-middle_attack\" rel=\"noopener noreferrer nofollow\">MitM<\/a>? \u0418\u043b\u0438 \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u043e\u0447\u043b\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0418\u043b\u0438 \u043d\u0435 \u0434\u0430\u043b\u043e \u0432\u0430\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437 <a href=\"https:\/\/habr.com\/ru\/post\/505926\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c<\/a> \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u0442\u0443?<\/p>\n<p>\u0418\u0441\u043f\u0443\u0433\u0430\u043b\u0438\u0441\u044c? \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0437\u0430\u0449\u0438\u0449\u0430\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043c \u0444\u043b\u0430\u0433 CLONE_FILES, \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u0447\u0435\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f &#8212; \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u0443\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u043e\u043d\u043a\u0443 (\u0435\u0441\u043b\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b &#8212; \u0434\u043e\u0441\u0442\u0443\u043f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d).<\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0444\u0430\u0439\u043b\u0443 (\u0441\u043e\u043a\u0435\u0442\u0443\/\u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0443) \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b FD_CLOEXEC, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043a\u0440\u043e\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0441\u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u0438 \u0437\u0430\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 exec():<\/p>\n<pre><code>man fcntl                                              If the FD_CLOEXEC bit  is        set, the file descriptor will automatically be closed during a        successful execve(2).   (If  the  execve(2)  fails,  the  file        descriptor  is  left open.)  If the FD_CLOEXEC bit is not set,        the file descriptor will remain open across an execve(2). <\/code><\/pre>\n<p>\u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c prog1, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0437\u0430\u0449\u0438\u0442\u0443:<\/p>\n<pre><code class=\"cpp\">    int f = open(\"\/etc\/passwd\", O_RDONLY);     fcntl(f, F_SETFD, FD_CLOEXEC); <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c open \u0438\u043b\u0438 socket (\u0438\u043d\u044b\u043c\u0438  \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u044d\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u0432\u044b, \u0430 \u043d\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430), \u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0444\u043b\u0430\u0433\u043e\u0432 O_CLOEXEC \u0438 SOCK_CLOEXEC \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e).<\/p>\n<p>\u0412\u043e\u0442, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u043f\u0443\u0441\u0442\u044f 10 \u043c\u0438\u043d\u0443\u0442 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438, <strong>\u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043e\u0432\u0435\u0442<\/strong>:<\/p>\n<blockquote>\n<p><strong>\u0412\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0449\u0438\u0449\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0444\u043b\u0430\u0433\u043e\u043c FD_CLOEXEC, \u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c fork+execv \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0445 \u0432\u0438\u0434\u0435\u0442\u044c.<\/strong><\/p>\n<\/blockquote>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u0443 \u0432\u0438\u043b\u043a\u0438 \u0442\u0440\u0438 \u0437\u0443\u0431\u0430?<\/h3>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u0440\u0438\u0432\u0435\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">    pid_t pid=fork();     if (pid==0) { \/* child process *\/         static char *argv[]={\"echo\",\"Foo is my name.\",NULL};         execv(\"\/bin\/echo\",argv);         exit(127); \/* only if execv fails *\/     }     else { \/* pid!=0; parent process *\/         waitpid(pid,0,0); \/* wait for child to exit *\/     } <\/code><\/pre>\n<p>\u0418 \u0432\u043e\u0442 \u0432\u0430\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441: \u0443 \u044d\u0442\u043e\u0439 &#171;\u0432\u0438\u043b\u043a\u0438&#187; \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0442\u0440\u0438 \u0437\u0443\u0431\u0430:<\/p>\n<pre><code>RETURN VALUE        On success, the PID of the child process is returned in the parent, and        0  is returned in the child.  On failure, -1 is returned in the parent,        no child process is created, and errno is set appropriately. <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e &#171;\u0435\u0441\u043b\u0438 ==0 &#8230; \u0438\u043d\u0430\u0447\u0435&#187; \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u0435\u043d \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043c\u0430\u043d\u0443\u0430\u043b\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u0432\u044b \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/www.linux.org.ru\/news\/linux-general\/5545961\" rel=\"noopener noreferrer nofollow\">memcpy<\/a>), \u043d\u043e \u0435\u0449\u0435 \u0438 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0432\u0440\u0435\u0434\u0438\u0442\u044c \u0432\u0441\u0435\u043c \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u043c \u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e: \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0438\u043b\u0438 \u043f\u0430\u043c\u044f\u0442\u0438) fork \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e, \u0432\u0435\u0440\u043d\u0443\u0432 \u0432\u0430\u043c -1. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u0442\u0435 \u0442\u0430\u043a\u043e\u0439 &#171;\u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440&#187; \u0432 waitpid \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c &#171;\u0436\u0434\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441&#187; (\u0447\u0442\u043e \u0443\u0436\u0435 \u043f\u043e\u043b\u043e\u043c\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b), \u043d\u043e \u0447\u0442\u043e \u0435\u0449\u0435 \u0445\u0443\u0436\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b, \u0432\u0434\u0440\u0443\u0433, \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0441\u0440\u043e\u0447\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 kill, \u0442\u043e&#8230;<\/p>\n<pre><code>       If pid equals -1, then sig is sent to every process for which the call\u2010        ing  process  has  permission  to  send  signals,  except for process 1        (init), but see below. <\/code><\/pre>\n<p>&#8230;\u0442\u043e \u0432\u044b \u043f\u043e\u0448\u043b\u0435\u0442\u0435 KILL\/TERM\/QUIT\/\u041a\u0430\u043a\u043e\u0439-\u0432\u044b-\u0442\u0430\u043c-\u0445\u043e\u0442\u0435\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u0412\u0421\u0415\u041c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u0441 \u0442\u0435\u043c\u0438 \u0436\u0435 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0410 \u043f\u043e\u0434 linux-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u043a\u0430\u043a \u0433\u043e\u0440\u0435\u0446, \u043e\u0434\u0438\u043d \u0441\u0442\u043e\u044f\u0442\u044c \u0438 \u043e\u043a\u0440\u043e\u0432\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043c\u0435\u0447\u043e\u043c \u0440\u0430\u0437\u043c\u0430\u0445\u0438\u0432\u0430\u0442\u044c:<\/p>\n<pre><code>       POSIX.1 requires that kill(-1,sig) send sig to all processes  that  the        calling process may send signals to, except possibly for some implemen\u2010        tation-defined system processes.  Linux  allows  a  process  to  signal        itself,  but on Linux the call kill(-1,sig) does not signal the calling        process. <\/code><\/pre>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 <strong>\u0441\u043e\u0432\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u0434\u0432\u0430<\/strong>: <\/p>\n<blockquote>\n<p><strong>\u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 fork.<\/strong><\/p>\n<\/blockquote>\n<p>(<em>\u0435\u0441\u043b\u0438 \u0432\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0435 \u043f\u0438\u0448\u0435\u0442\u0435 \u0438\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439 OOM-killer, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0431\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438<\/em>):<\/p>\n<pre><code class=\"cpp\">pid_t p; switch (p = fork()) {     case -1 : \/\/ error, process it         break;     case 0: \/\/ child process         break;     default:         \/\/ parent process } <\/code><\/pre>\n<h3>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u0434\u0435\u043c\u043e\u043d\u043e\u0432 \u0432\u0438\u043b\u043a\u043e\u0439?<\/h3>\n<p>\u042f\u0434\u0440\u043e Linux 3.4 \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Kepler \u043e\u0442 NVIDIA, \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 BTRFS, \u0438, \u0432 \u0447\u0438\u0441\u043b\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0444\u043b\u0430\u0433 PR_SET_CHILD_SUBREAPER. \u041e \u043d\u0451\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c.<\/p>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0432\u044b \u0432\u044b\u0437\u0432\u0430\u043b\u0438 fork, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0432\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0435 \u0441\u0443\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440, \u043d\u0443 \u0438\u043b\u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 100% \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f). \u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u0443\u0431-\u0443\u0442\u0438\u043b\u0438\u0442\u044b. \u0410 \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043f\u043e\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0432, \u0447\u0442\u043e \u0435\u0433\u043e \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043d\u0430 \u0432\u043e\u043b\u044e \u0440\u0435\u0448\u0430\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <a href=\"https:\/\/stackoverflow.com\/a\/17955149\/2932207\" rel=\"noopener noreferrer nofollow\">\u0434\u0435\u043c\u043e\u043d\u0430<\/a>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/webt\/x6\/xq\/ty\/x6xqtyd2jhzxw7r4jw9fqbwwihs.png\" data-width=\"512\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443: \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f &#171;\u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430&#187; \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c &#171;\u0434\u0435\u043c\u043e\u043d\u0430&#187;) \u0432\u0430\u0448 \u0432\u044b\u0437\u043e\u0432 waitpid \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c &#171;\u0434\u0435\u043c\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439&#187; \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0410 \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e \u0435\u0449\u0451 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f &#171;\u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430&#187;? &#171;\u0414\u0435\u043c\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439&#187; \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f. \u041d\u0430 init (pid 1). \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f &#171;\u0441\u0438\u0440\u043e\u0442\u043e\u0439&#187; \u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0433\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e, \u0435\u0433\u043e \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e &#171;\u0443\u0434\u043e\u0447\u0435\u0440\u044f\u0435\u0442&#187; init.<\/p>\n<p>\u041a\u0430\u043a \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430? \u0423 \u043d\u0430\u0441 \u043d\u0435\u0442 \u043d\u0438 \u0435\u0433\u043e PID, \u043d\u0438 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u043b\u0438\u043a, \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u043c \u043d\u0430\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f. \u042f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0441\u044f \u0441 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043b\u044f  \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043b\u0430\u0442\u0435\u0436\u0430, \u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u043b\u0430. \u041a\u0430\u043a \u0436\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c?<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438 \u043d\u0443\u0436\u0435\u043d \u0444\u043b\u0430\u0433 PR_SET_CHILD_SUBREAPER. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"cpp\">if (prctl(PR_SET_CHILD_SUBREAPER, 1lu))    _report_error(errno); <\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430. \u0412 \u043c\u0430\u043d\u0443\u0430\u043b\u0435 \u0447\u0451\u0442\u043a\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u043a\u0430\u043a<\/p>\n<pre><code class=\"cpp\">       int prctl(int option, unsigned long arg2, unsigned long arg3,                  unsigned long arg4, unsigned long arg5); <\/code><\/pre>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0445 \u044d\u0442\u043e <\/p>\n<pre><code class=\"cpp\">       int prctl(int option, ...); <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0435-\u043b\u0438\u0431\u043e \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0434\u0435\u043c\u043e\u043d\u0430, \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 wait()\/waitpid(-1, &#8230;) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e wait()\/waitpid(-1, &#8230;) \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0432\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d wait &#8212; \u0434\u0435\u043c\u043e\u043d \u0432\u0441\u0451 \u0435\u0449\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e wait \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0435\u0433\u043e \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438. \u0412\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c wait \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u043e\u0436\u0438\u0434\u0430\u044f, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u0432\u0435\u0440\u043d\u0435\u0442 -1 \u0438 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 errno \u0432 ECHILD, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0435\u0442 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432, \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c.<\/p>\n<p>\u0418\u0442\u0430\u043a, <strong>\u0441\u043e\u0432\u0435\u0442 #3<\/strong>: <\/p>\n<blockquote>\n<p><strong>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 PR_SET_CHILD_SUBREAPER.<\/strong><\/p>\n<\/blockquote>\n<p>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ptrace \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f SYS_clone, \u043d\u043e \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u0430\u0441\u0442 \u0435\u043c\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0435\u0433\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e\u0442 (\u0442\u0430\u043a\u043e\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435 \u043b\u044e\u0431\u044f\u0442 \u0430\u043d\u0442\u0438\u0447\u0438\u0442-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 DRM).<\/p>\n<h3>\u041a\u0430\u043a \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0438\u043b\u043a\u043e\u0439 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0442\u0430\u0440\u0435\u043b\u043a\u0443?<\/h3>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043e \u0441\u0443\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430\u0445. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e \u0432\u044b\u0432\u043e\u0434 \u0434\u0432\u0443\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e) \u0431\u0443\u0434\u0435\u0442 \u0441\u043c\u0435\u0448\u0430\u043d. \u0410 \u0435\u0441\u043b\u0438 \u0432\u044b\u0432\u043e\u0434 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e (\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043b\u043e\u0433\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0432\u043e\u0434\u043e\u043c write) \u0430 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0442\u0430\\\u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u043e\u0442\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435), \u0442\u043e \u0432\u044b\u0432\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u043d \u0434\u0430\u0436\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c stderr \u0434\u0430\u0436\u0435 \u043d\u0435 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u044b.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043d\u0435 \u043e\u0442\u0442\u044f\u0433\u0438\u0432\u0430\u044f \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u0435, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">static bool _redirect_handler(const char * filename, int handle) {     static const mode_t filemode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;     static const int fileflags = O_APPEND | O_CREAT | O_WRONLY;          int fd = open(filename, fileflags, filemode);     if (fd == -1) {         fprintf(stderr, \"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \\\"%s\\\"\\n\", filename);         return false;     }          if (dup2(fd, handle) &lt; 0) {         close(fd);         fprintf(stderr, \"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \\\"%d\\\"\\n\", handle);         return false;     }      close(fd);     return true; }  int main(void) {     switch (fork()) {         case -1: _exit(EXIT_FAILURE);         case 0 : {             if (!_redirect_handler(\"\/tmp\/out.log\", STDOUT_FILENO) ||                  !_redirect_handler(\"\/tmp\/err.log\", STDERR_FILENO)) {                 fprintf(stderr, \"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u043f\u043e\u0442\u043e\u043c\u043a\u0430\\n\");                 _exit(EXIT_FAILURE);             }                      static char * argv[] = { \".\/prog2.elf\", NULL };             execv(\".\/prog2.elf\", argv);             exit(127);         }         default:             wait(NULL);     }          return EXIT_SUCCESS; } <\/code><\/pre>\n<p>\u041c\u044b:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0444\u0430\u0439\u043b (open).<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 stdout \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c (dup2).<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043a\u0440\u044b\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e (close).<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u043b\u0438 \u0434\u043b\u044f stderr.<\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c close(STDOUT_FILENO)+open, \u044f \u043e\u0442\u0432\u0435\u0447\u0443, \u0447\u0442\u043e \u043c\u0430\u043d\u0443\u0430\u043b \u043e\u0442\u0432\u0435\u0442\u0438\u0442 \u043b\u0443\u0447\u0448\u0435 \u043c\u0435\u043d\u044f:<\/p>\n<pre><code>       The steps of closing and reusing the file  descriptor  newfd  are  per\u2010        formed  atomically.   This  is  important,  because trying to implement        equivalent functionality using close(2) and dup() would be  subject  to        race  conditions,  whereby newfd might be reused between the two steps.        Such reuse could happen because the main program is  interrupted  by  a        signal  handler that allocates a file descriptor, or because a parallel        thread allocates a file descriptor. <\/code><\/pre>\n<p><strong>\u0421\u043e\u0432\u0435\u0442 #4:<\/strong> <\/p>\n<blockquote>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/strong><\/p>\n<\/blockquote>\n<h3>\u041a\u0430\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0442\u044c \u0432\u0438\u043b\u043a\u0435?<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/webt\/v2\/1d\/cy\/v21dcyav0axuuj84bpcbl96xhdg.png\" data-width=\"512\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 signal\/sigaction \u0438 fork \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e &#8212; \u0442\u043e \u044f \u0433\u043e\u0442\u043e\u0432 \u043f\u043e\u0441\u043f\u043e\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u044b \u043f\u043e\u043f\u0430\u043b\u0438\u0441\u044c \u0432 \u043b\u043e\u0432\u0443\u0448\u043a\u0443.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e forked-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 <strong>\u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442<\/strong> \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:<\/p>\n<ol>\n<li>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 fork() \u043a \u0432\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u0442\u044c <a href=\"https:\/\/doc.zeroc.com\/frequently-asked-questions\/ice-for-c++-faqs\/how-can-i-fork-and-exec-an-ice-process#:~:text=If%20your%20application,after%20fork%20returns\" rel=\"noopener noreferrer nofollow\">\u0432 \u043e\u0431\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u0440\u0430\u0437\u0443<\/a>, \u043a\u043e\u0433\u0434\u0430: \u0441\u0438\u0433\u043d\u0430\u043b \u0431\u044b\u043b \u043f\u043e\u0441\u043b\u0430\u043d \u0432\u0441\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435, \u0430 \u043e\u0431\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432 \u043d\u0435\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u0431\u044b\u043b \u043f\u043e\u0441\u043b\u0430\u043d \u0432\u0441\u0435\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435, \u0430 OOM \u0438\u043b\u0438 systemd \u043f\u043e\u0441\u043b\u0430\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b \u0432\u0441\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u0435. \u0418 \u0435\u0441\u043b\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e \u043e\u0442\u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u043b (\u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442 \u0444\u043b\u0430\u0433\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443), \u0442\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0438\u0447\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0434\u043e \u0437\u0430\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430\u043c\u0435\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0444\u043b\u0430\u0433\u0430\u043c \u0443\u0436\u0435 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0435 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0447\u0442\u043e-\u0442\u043e \u0432 \u043b\u043e\u0433, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u043e\u0437\u0434\u0430\u0432 \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b).<\/p>\n<\/li>\n<\/ol>\n<p>\u0420\u0430\u0441\u043f\u0438\u0448\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:<\/p>\n<pre><code class=\"cpp\">static __thread sigset_t g_sig_blocked;  \/*! \\brief \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f  * \u0432 fork()-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432  * \\return \u0418\u0441\u0442\u0438\u043d\u0430, \u0435\u0441\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c *\/ bool _sigreset_block(void) {     sigset_t setnew;     sigfillset(&amp;setnew);     sigemptyset(&amp;g_sig_blocked);      return  pthread_sigmask(SIG_SETMASK, &amp;setnew, &amp;g_sig_blocked) == 0; }  \/*! \\brief \u0421\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435  * \u0431\u044b\u043b\u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043e \u043f\u0430\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 `_sigreset_block`  * \\return \u0418\u0441\u0442\u0438\u043d\u0430, \u0435\u0441\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043d\u044f\u0442\u0430 *\/ bool _sigreset_unblock(void) {     return pthread_sigmask(SIG_SETMASK, &amp;g_sig_blocked, NULL) == 0; }  \/*! \\brief \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u0441\u0435\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.  * \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 fork() \u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u0441\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043a\u0430\u043a \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f,  * \u0447\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0436\u0435\u043b\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.  * \\return \u0418\u0441\u0442\u0438\u043d\u0430, \u0435\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e *\/ bool _sigreset_default(void) {     struct sigaction signal_act = {         .sa_handler = SIG_DFL     };      if (sigfillset(&amp;signal_act.sa_mask) &lt; 0)         return false;      for (i32 i = 1; i &lt;= SIGRTMAX; i++)         if (sigismember(&amp;signal_act.sa_mask, i) == 1)             sigaction(i, &amp;signal_act, NULL);      return _sigreset_unblock(); } <\/code><\/pre>\n<pre><code class=\"cpp\">\/*! \\brief \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441   * \\param[in] program \u0418\u043c\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b  * \\param[in] pargs \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b *\/ static int _execute_process( const char * program, char * pargs[_ARGS_COUNT]) {     if (!_sigreset_block()) {         _err(\"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432\");         return -1;     }      int process = fork();     switch (process) {         case -1 :             _err(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 fork-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\");             break;         case  0 :         \/* \u041f\u043e\u043a\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f          * \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c (_Exit) \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 *\/             if (!_sigreset_default()) {                 _err(\"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\");                 _Exit(EXIT_FAILURE);             }             \/* \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0440\u0435\u0442\u044c\u044e \u0432\u0435\u0442\u043a\u0443,                \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 pid *\/             execve(program, pargs, environ);             _err(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \\\"%s\\\"\", program);             _Exit(EXIT_FAILURE);     }      if (!_sigreset_unblock()) {         _err(\"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432\");         \/* \u041c\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0433\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043d\u043e \u0438 \u043e\u0431\u0440\u0443\u0448\u0438\u043b\u0438          * workflow \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0434\u0438\u043dc\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431          * \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f - exit, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0441\u0442\u0435\u0440\u0442\u044b *\/         exit(EXIT_FAILURE);     }          return process; } <\/code><\/pre>\n<ol>\n<li>\n<p>\u041c\u044b \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u0438\u0445\u043e\u0434 \u0432\u0441\u0435\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0432 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u0432\u0430\u043b\u0438 fork() \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u0440\u043d\u0443\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u043b\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a g_sig_blocked, \u0430 \u0432\u0435\u0434\u044c \u0435\u0441\u043b\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0442 \u0434\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 &#8212; \u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u043e\u043d\u043a\u0438. \u0412\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u0440\u0438\u0439\u0442\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043f\u0440\u0438\u0434\u0443\u0442 \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435 (\u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u0438), \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a. \u041f\u043e\u043c\u043d\u0438\u0442\u0435 \u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c\u0443 \u0432\u0445\u043e\u0434\u0443 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e (\u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043e\u0434\u0438\u043d \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432), \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 mutex \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u043d\u0438\u0442\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 &#8212; \u044d\u0442\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439.<\/p>\n<p><strong>\u0421\u043e\u0432\u0435\u0442 #5:<\/strong> <\/p>\n<blockquote>\n<p><strong>\u0411\u043b\u043e\u043a\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0440\u0438\u0445\u043e\u0434 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c fork(), \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0438\u043d\u0430\u0447\u0435 \u0432\u044b \u0440\u0438\u0441\u043a\u0443\u0435\u0442\u0435 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u0445\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/strong><\/p>\n<\/blockquote>\n<h3>\u041a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0438\u043b\u043a\u043e\u0439 \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u043c\u0430\u043b\u0430\u0441\u044c \u0440\u0443\u0447\u043a\u0430?<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/webt\/di\/gz\/b6\/digzb6jrhuvisomfgdue19o5tc0.png\" data-width=\"512\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043b \u0441\u0443\u0434\u043e\u043a\u0443. <\/p>\n<p>\u041d\u043e \u043a\u0430\u043a \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u043b\u0430 \u0435\u0433\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0445\u0430\u0447\u0430\u043f\u0443\u0440\u0438? <\/p>\n<p>\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c parent pid? <\/p>\n<p>\u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b\u0438 \u0435\u0433\u043e? \u0425\u043e\u0440\u043e\u0448\u043e \u0435\u0441\u043b\u0438 \u044d\u0442\u043e pid 1, \u044d\u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043c\u043e\u0436\u0435\u043c, \u0430 \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b SUBREAPER-\u0444\u043b\u0430\u0433 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u044b\u0448\u0435? \u0414\u0430 \u0438, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 ppid \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u043c.<\/p>\n<p>\u041d\u043e \u043d\u0435 \u0431\u043e\u0439\u0442\u0435\u0441\u044c, \u0441\u0430\u043c\u0443\u0440\u0430\u0438. \u0412\u0440\u0435\u043c\u044f \u0444\u0443\u0434\u0437\u0438\u044f\u043c\u044b \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 prctl:<\/p>\n<pre><code>       PR_SET_PDEATHSIG (since Linux 2.1.57)               Set  the  parent  death  signal  of  the calling process to arg2               (either a signal value in the range 1..maxsig, or 0  to  clear).               This  is  the  signal that the calling process will get when its               parent dies.  This value is cleared for the child of  a  fork(2)               and  (since  Linux 2.4.36 \/ 2.6.23) when executing a set-user-ID               or set-group-ID binary, or a binary that has associated capabil\u2010               ities  (see  capabilities(7)).   This  value is preserved across               execve(2).                Warning: the \"parent\" in this  case  is  considered  to  be  the               thread  that  created  this process.  In other words, the signal               will be sent when that  thread  terminates  (via,  for  example,               pthread_exit(3)),  rather  than  after all of the threads in the               parent process terminate. <\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0430\u0431\u0437\u0430\u0446 &#8212; \u043f\u043e\u0441\u044b\u043b\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e <em>\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/em>, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 (\u0442\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u0432\u0430\u043b\u0430 fork()) <em>\u043d\u0438\u0442\u0438<\/em>.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">            if (prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0) == -1) {                 _err(\"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u044b\u043b \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u0440\u0442\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f\");                 _Exit(EXIT_FAILURE);             } <\/code><\/pre>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c &#171;\u0433\u043e\u043d\u043a\u0438&#187;, \u043a\u043e\u0433\u0434\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0443\u043c\u0435\u0440 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a fork()-\u043d\u0443\u0442\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b PR_SET_DEATHSIG. \u0414\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c pid \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0434\u043e fork(), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 <strong>\u043f\u043e\u0441\u043b\u0435<\/strong> \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u043b\u0430\u0433\u0430. \u0418 \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 &#8212; \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u044b \u0432\u044b\u0438\u0433\u0440\u0430\u043b\u0438 \u0432 \u043b\u043e\u0442\u0435\u0440\u0435\u044e \u043d\u043e\u0432\u044b\u0445 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c SIGKILL, \u043d\u043e \u0432\u044b \u0432 \u043f\u0440\u0430\u0432\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u044b\u043b \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u043c\u0435\u0440\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 SIGTERM. \u041f\u0440\u0430\u0432\u0434\u0430 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0439\u0442\u0435 &#8212; \u043b\u0438\u0431\u043e \u0434\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0438 \u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u043e \u0441\u043b\u0430\u0442\u044c SIGTERM, \u043b\u0438\u0431\u043e \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0438 \u0441\u043b\u0430\u0442\u044c SIGKILL \u0441 \u0448\u0430\u043d\u0441\u043e\u043c \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0451 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d. \u041d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u0443\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0430? \u041d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <a href=\"https:\/\/github.com\/transmission\/transmission\/blob\/main\/daemon\/daemon.cc#L777\" rel=\"noopener noreferrer nofollow\">transmission<\/a>? \u0412\u0430\u043b \u0441\u0442\u0430\u043d\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u043e\u0440\u043e\u0442\u043e\u0432?<\/p>\n<p><strong>\u0421\u043e\u0432\u0435\u0442 #6<\/strong> <\/p>\n<blockquote>\n<p><strong>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u044b\u043b \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u0440\u0442\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f.<\/strong><\/p>\n<\/blockquote>\n<h3>\u041a\u0430\u043a \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0432\u0438\u043b\u043a\u0438?<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 mutex \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u0430\u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u0443 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0443). \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 fork() \u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043a\u043e\u043f\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 mutex \u0432 \u0442\u043e\u043c \u0441\u0442\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u0431\u044b\u043b <strong>\u0434\u043e<\/strong> \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438  \u0443\u0436\u0435 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e (\u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u043c) \u0438 \u0432\u0441\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u041d\u043e \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e fork() \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u0432 \u0441\u043e \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u0440\u0430\u0437\u0443\u043c\u043d\u043e, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f private-\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"https:\/\/manpages.debian.org\/bullseye\/glibc-doc\/pthread_atfork.3.en.html\" rel=\"noopener noreferrer nofollow\">pthread_atfork<\/a>:<\/p>\n<pre><code class=\"cpp\">int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void)); <\/code><\/pre>\n<p>\u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043d\u0438\u0442\u0438, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0435\u043c\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>prepare &#8212; \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 fork(), \u0434\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f.<\/p>\n<\/li>\n<li>\n<p>parent &#8212; \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 fork(), \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f.<\/p>\n<\/li>\n<li>\n<p>child &#8212; \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 fork(), \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e \u0444\u0430\u043a\u0442\u0443, \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u0430 \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 (\u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 POSIX.1) \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 <a href=\"https:\/\/man7.org\/linux\/man-pages\/man7\/signal-safety.7.htm\" rel=\"noopener noreferrer nofollow\">async-signal-safe<\/a>  \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 exec, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a pthread_mutex_lock \u0438 pthread_mutex_unlock \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u0430\u043a\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435 async-signal-safe \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438.<\/p>\n<p>\u0421 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u044b \u043d\u0435 \u0438\u043c\u0435\u0435\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0431\u044b\u043b \u043b\u0438 \u044d\u0442\u043e\u0442 mutex \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0438\u043b\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d, \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043b\u0438 \u0441\u0430\u043c \u0440\u0435\u0441\u0443\u0440\u0441 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0414\u0430, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 LIFO-\u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 pthread_atfork, \u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0445 \u043e\u0442\u0442\u0443\u0434\u0430 \u0443\u0434\u0430\u043b\u0438\u0442\u044c. \u041c\u043e\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f &#8212; \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u044d\u0442\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u043e\u0440\u043d\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0430\u0448\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0438 \u0442\u043e\u0433\u0434\u0430 pthread_atfork \u0431\u0443\u0434\u0435\u0442 \u0432\u0430\u0448\u0435\u0439 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<h3>\u041a\u0430\u043a \u043f\u043e\u0446\u0430\u0440\u0430\u043f\u0430\u0442\u044c \u043e\u043a\u043d\u043e \u0432\u0438\u043b\u043a\u043e\u0439?<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/webt\/md\/hf\/25\/mdhf254omsk_vrv3sn5in98knug.png\" data-width=\"512\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u0447\u0442\u043e \u0436\u0435 Windows-\u0441\u0438\u0441\u0442\u0435\u043c\u044b? \u0414\u0430 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0434 Windows \u044d\u0442\u043e <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/c-runtime-library\/reference\/signal\" rel=\"noopener noreferrer nofollow\">\u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0428\u0440\u0451\u0434\u0438\u043d\u0433\u0435\u0440\u0430<\/a> , \u043e\u043d\u0438 \u0432\u0440\u043e\u0434\u0435 \u0435\u0441\u0442\u044c, \u043d\u043e \u0438\u0445 \u0432\u0440\u043e\u0434\u0435 \u043d\u0435\u0442):<\/p>\n<pre><code class=\"cpp\">\/*! \\brief \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c  * \\param[in] program \u0418\u043c\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b  * \\param[in] creationflags \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432  * \\param[in] pargs \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b   * \\return \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 *\/ PROCESS_INFORMATION _execute_process( const char * program, DWORD creationflags, char * pargs[_ARGS_COUNT]) {     \/* https:\/\/www.linux.org.ru\/forum\/development\/7216318      * \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043c\u0438\u043d\u0433\u0432\u0438\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043a\u0430?      *                              knkd(04.01.12 02:10:43)      * \u0437\u0430\u043f\u043b\u0430\u043a\u0430\u0442\u044c      *                       alex_custov(04.01.12 02:16:55) *\/      LPWSTR wprog = _stringa2w(program); \/\/ \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 UTF-8 \u0432 WIDECHAR     LPWSTR wargs = _argsa2w  (pargs);      SECURITY_ATTRIBUTES sa;     sa.nLength = sizeof(sa);     sa.lpSecurityDescriptor = NULL;     sa.bInheritHandle = TRUE;      PROCESS_INFORMATION pi = { 0 };     STARTUPINFO         si = { 0 };     si.cb = sizeof(STARTUPINFO);      if (!CreateProcessW(             wprog,             wargs,             NULL,             NULL,             TRUE,             creationflags,             NULL,             NULL,             &amp;si,             &amp;pi         )) {         _err(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 fork-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\");         memset(&amp;process, 0, sizeof(PROCESS_INFORMATION));     }       free(wprog);     free(wargs);          return pi; } <\/code><\/pre>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0447\u043d\u0435\u043c \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u0442\u044c &#171;\u043c\u044f\u0441\u043e&#187;:<\/p>\n<p>\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b (\u0433\u043b\u0430\u0432\u0430 &#171;<strong>\u041a\u0430\u043a \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0438\u043b\u043a\u043e\u0439 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0442\u0430\u0440\u0435\u043b\u043a\u0443?<\/strong>&#171;):<\/p>\n<pre><code class=\"cpp\">\/*! \\brief \u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u043c  * \\param[in] filename \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 NULL  * \\param[in] handle \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 (stdout\/stderr)  * \\return \u0418\u0441\u0442\u0438\u043d\u0430, \u0435\u0441\u043b\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d *\/ static bool _redirect_handler(const char * filename, HANDLE * handle) {     static const DWORD fileaccess = FILE_APPEND_DATA;     static const DWORD fileshare  = FILE_SHARE_WRITE | FILE_SHARE_READ;     static const DWORD filedisp   = OPEN_ALWAYS;     static const DWORD fileattr   = FILE_ATTRIBUTE_NORMAL;      LPWSTR wfile = _stringa2w(filename);     HANDLE hfile = CreateFile(         wfile,         fileaccess,         fileshare,         NULL,         filedisp,         fileattr,         NULL     );     free(wfile);      if (hfile == INVALID_HANDLE_VALUE) {         _err(\"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \\\"%s\\\"\", filename);         return false;     }      *handle = hfile;     return true; } <\/code><\/pre>\n<pre><code class=\"cpp\">   \/\/ \u0414\u043e \u0432\u044b\u0437\u043e\u0432\u0430 CreateProcess:     if !_redirect_handler(filename_out,  &amp;si->hStdOutput) ||        !_redirect_handler(filename_err,  &amp;si->hStdError ) {        _err(\"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434\");     } <\/code><\/pre>\n<p>\u041f\u0440\u043e\u0441\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c (\u0433\u043b\u0430\u0432\u0430 &#171;<strong>\u041a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0438\u043b\u043a\u043e\u0439 \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u043c\u0430\u043b\u0430\u0441\u044c \u0440\u0443\u0447\u043a\u0430?<\/strong>&#171;):<\/p>\n<pre><code class=\"cpp\">\/*! \\brief \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 JOB \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c *\/ static HANDLE gJob = 0;  \/*! \\brief \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 JOB *\/ static void _job_create(void) {     JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 };      gJob = CreateJobObject(NULL, NULL);     jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;     SetInformationJobObject(         gJob,         JobObjectExtendedLimitInformation,         &amp;jeli,         sizeof(jeli)     ); }     \/\/ \u0414\u043e \u0432\u044b\u0437\u043e\u0432\u0430 CreateProcess:      if (diewithparent) {        BOOL bIsProcessInJob;         if (IsProcessInJob(GetCurrentProcess(), NULL, &amp;bIsProcessInJob) == 0)             return false;          creationflags = bIsProcessInJob ? CREATE_BREAKAWAY_FROM_JOB : 0;          static pthread_once_t ponce;         pthread_once(&amp;ponce, _job_create);     }          \/\/ \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 CreateProcess:          if (diewithparent) {         if (AssignProcessToJobObject(gJob, pi->hProcess) == 0)          \/\/ \u0412\u0441\u0451 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Linux             return ...; \/\/ \u041e\u0448\u0438\u0431\u043a\u0430     }<\/code><\/pre>\n<h3>\u041a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0438\u043b\u043a\u043e\u0439?<\/h3>\n<p>\u041d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 &#8212; \u0432\u044b\u0437\u043e\u0432 system(). \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u044f \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438 \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0435\u0451 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0414\u0430 \u0434\u0430\u0436\u0435 \u0438 \u043d\u0435 \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u043c:<\/p>\n<pre><code class=\"cpp\">static void * _thread_func(void * data) {     g_result   = system(program);     g_finished = true;      pthread_exit(NULL);     return NULL; }  ...  g_finished = false; pthread_create(&amp;thread, NULL, _thread_func, NULL); while (!g_finished) {     \/\/ \u0414\u0435\u043b\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f     sleep(1); } <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b &#8212; \u043f\u043e\u0439\u0434\u0451\u0442. \u0414\u043b\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e  &#8212; \u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0442. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 system:<\/p>\n<h4>\u0411\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c<\/h4>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e &#8212; system \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 &#8212; \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u043a\u0430 fork() + exec() + wait(), \u043c\u044b \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 system, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443:<\/p>\n<pre><code class=\"cpp\">int _system(const char * command) {     pid_t child = fork();     switch (child) {         case -1:             return -1;         case 0 :             execl(\"\/bin\/sh\", \"sh\", \"-c\", command, (char *) NULL);             _exit(127);         default:             int status = 0;             while (waitpid(child, &amp;status, 0) == -1) {                 if (errno != EINTR) {                     status = -1;                     break;                 }             }             return status;     } } <\/code><\/pre>\n<p>\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u043d\u0438\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430. \u0417\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043d\u0438\u0442\u044c \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u043c system(), \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0438\u0437 \u043d\u0438\u0442\u0438, \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0434\u0435\u043b\u0430\u0442\u044c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Busy_waiting\" rel=\"noopener noreferrer nofollow\">busy wait<\/a>, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c pid. \u041d\u0435 \u043f\u0440\u043e\u0449\u0435 \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c fork() \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e?<\/p>\n<h4>\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 Thread safety<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 <code>man system<\/code> \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 Linux-\u0441\u0438\u0441\u0442\u0435\u043c, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443:<\/p>\n<pre><code>       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510        \u2502Interface \u2502 Attribute     \u2502 Value   \u2502        \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524        \u2502system()  \u2502 Thread safety \u2502 MT-Safe \u2502        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0442\u043e &#8212; \u044d\u0442\u043e \u043d\u0430\u0433\u043b\u0430\u044f \u043b\u043e\u0436\u044c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f system \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>sigaction<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0434\u043b\u044f \u0412\u0421\u0415\u0425 \u043d\u0438\u0442\u0435\u0439 \u0441\u0440\u0430\u0437\u0443. \u041f\u0440\u0438\u0447\u0438\u043d\u044b \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435, \u0430 \u043f\u043e\u043a\u0430 \u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443: <\/p>\n<p><a href=\"https:\/\/www.freebsd.org\/cgi\/man.cgi?query=system&amp;apropos=0&amp;sektion=0&amp;manpath=FreeBSD+13.0-RELEASE+and+Ports&amp;arch=default&amp;format=html\" rel=\"noopener noreferrer nofollow\">BSD<\/a>:<\/p>\n<pre><code>STANDARDS      The system() function conforms to ISO\/IEC 9899:1990 (\"ISO C90\") and is      expected to be IEEE Std 1003.2 (\"POSIX.2\")    compatible. <\/code><\/pre>\n<p>\u0417\u0430\u044f\u0432\u043b\u0435\u043d\u0430 \u043a\u0430\u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f POSIX, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u0435\u0451 \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. <\/p>\n<p><a href=\"https:\/\/www.freebsd.org\/cgi\/man.cgi?query=system&amp;apropos=0&amp;sektion=0&amp;manpath=SunOS+5.10&amp;arch=default&amp;format=html\" rel=\"noopener noreferrer nofollow\">SunOS<\/a>:<\/p>\n<pre><code>       +-----------------------------+-----------------------------+        |      ATTRIBUTE    TYPE      |        ATTRIBUTE VALUE      |        +-----------------------------+-----------------------------+        | Interface Stability         | Standard                    |        +-----------------------------+-----------------------------+        | MT-Level                    | Unsafe                      |        +-----------------------------+-----------------------------+ <\/code><\/pre>\n<p>\u0412 \u0447\u0435\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c? \u0412\u043e \u0432\u0441\u0435\u0445 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0445, \u0447\u0442\u043e \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 &#8212; \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 system \u0437\u0430\u0449\u0438\u0442\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u041d\u043e \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u044d\u0442\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 <strong>\u0441\u0430\u043c<\/strong> \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 SIGINT, SIGCHLD \u0438\u043b\u0438 SIGQUIT &#8212; \u0442\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442 \u0445\u0430\u043e\u0441 \u0438 \u0440\u0430\u0437\u0440\u0443\u0445\u0430 \u0432 \u043a\u043b\u043e\u0437\u0435\u0442\u0430\u0445, \u043d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a:<\/p>\n<pre><code>   The system() function  manipulates  the    signal    handlers  for  SIGINT,    SIGQUIT,     and  SIGCHLD.    It is therefore    not safe to call system() in a    multithreaded process, since some other thread that  manipulates     these    signal  handlers     and a thread that concurrently    calls system() can in-    terfere with each other in a destructive    manner.     If, however, no  such    other thread is active, system()    can safely be called concurrently from    multiple    threads. See popen(3C) for an alternative to system() that  is    thread-safe. <\/code><\/pre>\n<h4>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 SIGQUIT \u0438 SIGINT<\/h4>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435:<\/p>\n<pre><code class=\"cpp\">#include &lt;stdlib.h> #include &lt;signal.h> #include &lt;stdio.h>  void sig_handler(int signum){   \/\/ \u0423\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043d\u043e \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0439\u0434\u0451\u0442   printf(\"\u041f\u0440\u0438\u0448\u0451\u043b \u0441\u0438\u0433\u043d\u0430\u043b %d\\n\", signum);   exit(0); }  int main(void) {     signal(SIGINT, sig_handler);     system(\"sleep 10\");     printf(\"\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\\n\");     return 0; } <\/code><\/pre>\n<pre><code>$ gcc sigdemo.c -o sigdemo.elf $ .\/sigdemo.elf  ^C\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 <\/code><\/pre>\n<p>\u041c\u044b \u043f\u043e\u0441\u043b\u0430\u043b\u0438 \u0441\u0438\u0433\u043d\u0430\u043b SIGINT, \u0432\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0437-\u0437\u0430 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439 \u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u0443 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043a\u043b\u0435\u0438\u0442\u0441\u044f \u0441 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439 &#171;Run &amp; Go&#187;:<\/p>\n<pre><code class=\"cpp\">       int ret = system(\"foo\");         if (WIFSIGNALED(ret) &amp;&amp;            (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))                break; <\/code><\/pre>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043e \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0432 \u043c\u0430\u043d\u0443\u0430\u043b\u0430\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0430 \u0432\u043e\u0442 \u043a\u0430\u043a \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0432 glibc. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 system() \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435.<\/p>\n<h4>\u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a shell<\/h4>\n<p>\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0431\u0430\u0432\u043d\u044b\u043c \u0444\u0430\u043a\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e system \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443. \u041e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u0432\u0435\u0434\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 &#8212; \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u0430\u044f <code>const char *<\/code>). \u041f\u0430\u0440\u0441\u0438\u043d\u0433 &#8212; \u0448\u0442\u0443\u043a\u0430 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0438 \u0434\u043e\u0440\u043e\u0433\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0440\u0435\u0448\u0438\u043b\u0438 \u0443\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u044d\u0442\u0443 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 shell:<\/p>\n<pre><code class=\"cpp\">  34 #define SHELL_PATH      \"\/bin\/sh\"       \/* Path of the shell.  *\/   35 #define SHELL_NAME      \"sh\"            \/* Name to give it.  *\/ ...  147   ret = __posix_spawn (&amp;pid, SHELL_PATH, 0, &amp;spawn_attr,  148                        (char *const[]){ (char *) SHELL_NAME,  149                                         (char *) \"-c\",  150                                         (char *) line, NULL },  151                        __environ); <\/code><\/pre>\n<p>\u041a\u0430\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0445\u043e\u0442\u044f \u0431\u044b \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c POSIX-\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c<\/strong>, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0438\u043c\u0435\u0442\u044c <code>\/bin\/sh<\/code>. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0442\u0430\u043a \u0438 \u0435\u0441\u0442\u044c, \u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445 \u043c\u043e\u0433\u0443\u0442 \u0438 \u043d\u0435 \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0432\u0441\u0435\u0445 \u0443\u0442\u0438\u043b\u0438\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 shell \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>\/bin\/sh<\/code> &#8212; \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 system() \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u042d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u043a\u043e\u0431\u043a\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0437\u0430\u0431\u043e\u0442\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/strong>. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b &#8212; \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0447\u0435\u0440\u0435\u0437 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <code>\\\u2423<\/code> \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0441\u043a\u043e\u0431\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u043e\u0439\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u0435 shell-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/strong>. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u0448\u0430\u0442\u044c \u0432\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0443\u044e shell \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 &#171;$100&#187;: <\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">#include &lt;stdlib.h>  int main(void) {     system(\"echo $100\");     return 0; }<\/code><\/pre>\n<pre><code>$ .\/sigdemo.elf  &lt;\u043f\u0443\u0441\u0442\u043e><\/code><\/pre>\n<p>\u042d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>$100<\/code>  \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u043a\u0430\u0432\u044b\u0447\u0435\u043a (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445 \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f shell) \u0438\u043b\u0438 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0432 \u0441\u0438\u043c\u0432\u043e\u043b <code>$<\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<ul>\n<li>\n<p><strong>\u042d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 sh-shell<\/strong>. \u042d\u0442\u043e \u043f\u043e\u0434 NIX-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 <code>\/bin\/sh<\/code> (dash\/bash\/zsh). \u041f\u043e\u0434 MS-DOS \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 <code>COMMAND.COM<\/code>, \u043f\u043e\u0434 MSVC &#8212; <code>cmd.exe<\/code>. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 shell \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u043e \u0438\u0442\u043e\u0433\u0430\u043c \u0433\u043b\u0430\u0432\u044b, <strong>\u0441\u043e\u0432\u0435\u0442 #7<\/strong>: <\/p>\n<blockquote>\n<p><strong>\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <\/strong><code>system()<\/code><strong> \u0434\u043b\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438.<\/strong><\/p>\n<\/blockquote>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0433\u0430\u0439\u0434-\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0430\u043c \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438 \u0447\u0442\u043e \u0432\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u0430\u043d\u0435\u0442\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u0430\u043c \u0441\u043e stackoverflow \u0441 \u043d\u0430\u0438\u0432\u044b\u0441\u0448\u0438\u043c \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u043e\u043c.<\/p>\n<p>\u041e\u0441\u043e\u0431\u0430\u044f \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043b\u044e\u0434\u044f\u043c:<\/p>\n<ul>\n<li>\n<p>\u041c\u043e\u0435\u043c\u0443 \u043a\u043e\u043b\u043b\u0435\u0433\u0435, \u0410\u043b\u0435\u043a\u0441\u0435\u044e \u0428. \u0437\u0430 \u0440\u0435\u0432\u044c\u044e \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041c\u043e\u0435\u043c\u0443 \u043a\u043e\u043b\u043b\u0435\u0433\u0435, \u0412\u044f\u0447\u0435\u0441\u043b\u0430\u0432\u0443 \u0420. \u0437\u0430 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e LOR <a href=\"https:\/\/www.linux.org.ru\/people\/wandrien\/profile\" rel=\"noopener noreferrer nofollow\">wandrien<\/a> \u0437\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/wandrien.dev\/developer-notes\/2021\/system-3\/\" rel=\"noopener noreferrer nofollow\">system<\/a><\/p>\n<\/li>\n<li>\n<p>\u041c\u043e\u0435\u0439 \u0436\u0435\u043d\u0435 \u0437\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \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\/post\/586604\/\"> https:\/\/habr.com\/ru\/post\/586604\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>&#8230;\u0438\u043b\u0438 \u043e fork() \u0432 \u0434\u0432\u0443\u0445 \u0441\u043b\u043e\u0432\u0430\u0445.<\/p>\n<h3>\u041a\u0430\u043a \u043b\u044e\u0434\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438<\/h3>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435. \u041b\u044e\u0434\u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u043b\u0438\u0431\u043e \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430\u00b9; \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043e\u043f\u044b\u0442\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043b\u044e\u0434\u0435\u0439\u00b2 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u044f\u0441\u044c \u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438\u00b3. \u0418 \u0441\u0430\u043c\u043e\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435, \u0447\u0442\u043e \u043c\u0438\u0440 \u043d\u0435 \u0432\u0437\u043e\u0440\u0432\u0430\u043b\u0441\u044f, \u043d\u0438\u043a\u0442\u043e (\u043c\u0430\u0441\u0441\u043e\u0432\u043e) \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0443\u043c\u0435\u0440, \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0434\u0435\u043d\u044c\u0433\u0438.<\/p>\n<p>\u00b9 <em>&#171;\u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0430\u043a \u043f\u0438\u0448\u0443 \u043a\u043e\u0434, \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0443\u043c\u0435\u0440&#187;<\/em> <br \/>\u00b2 <em>&#171;\u043a\u043e\u043f\u0438\u0440\u0443\u044e \u043a\u043e\u0434 \u0438\u0437 stack overflow \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0431\u0440\u0430\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0445 \u043f\u043b\u044e\u0441\u043e\u0432&#187;<\/em> <br \/>\u00b3 <em>&#171;\u043a\u043e\u043f\u0438\u0440\u0443\u044e \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u043a\u043e\u0434 \u0438\u0437 stack overflow&#187;<\/em><\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 &#8212; \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439. \u0414\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0439 \u0437\u0430\u043f\u043b\u044e\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0448\u0438\u0431\u0430\u0442\u044c\u0441\u044f, \u043d\u043e \u0432\u0435\u0434\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043b\u044e\u0434\u0435\u0439 \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0440\u0438\u0432\u0438\u0432\u043a\u0438 \u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043b\u044e\u0434\u0435\u0439 \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0440\u0438\u0432\u0438\u0432\u043a\u0438 \u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0433\u0440\u0443\u043f\u043f, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0438, \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0443.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043e\u0442\u0432\u043b\u0435\u043a\u043b\u0438\u0441\u044c. \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0431\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0443:<\/p>\n<blockquote>\n<p><strong>\u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443.<\/strong><\/p>\n<\/blockquote>\n<p>\u041d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u043e, \u0437\u0430\u0447\u0435\u043c. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a \u0438\u0433\u0440\u044b \u0438\u0437 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0430, \u0437\u0430\u043f\u0443\u0441\u043a \u0443\u0442\u0438\u043b\u0438\u0442\u044b ping \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 ICMP-\u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e \u043a\u043b\u0438\u043a\u0443 \u043d\u0430 \u044f\u0440\u043b\u044b\u043a, \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0432\u044b \u0441\u0430\u043c\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0437 \u0432 \u0436\u0438\u0437\u043d\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c, \u044d\u0442\u043e \u041a\u0430\u0440\u0442\u043e\u0448\u043a\u0430. \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0433\u0430\u0442\u044c \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0438\u043b\u043a\u043e\u0439: <\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<h4>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/h4>\n<ol>\n<li>\n<p><strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0432\u0438\u043b\u043a\u043e\u0439?<br \/><\/strong><em>\u041e\u0431\u0449\u0438\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043f\u043e\u0434 LINUX-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u043a\u043e\u0440\u043e\u0432\u0443 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u0438\u043b\u043a\u0430?<br \/><\/strong><em>Copy-on-write, \u0447\u0442\u043e \u044d\u0442\u043e \u0438 \u0437\u0430\u0447\u0435\u043c? vfork \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u043d\u0435 \u043b\u0443\u0447\u0448\u0435<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u0438\u043a\u0440\u0443?<br \/><\/strong><em>posix_spawn \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u043d\u0435 \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u0442 fork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u044e\u0442 \u043a\u043b\u043e\u043d\u044b?<br \/><\/strong><em>clone() \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0443 fork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u043a\u043e\u0433\u0434\u0430 \u0435\u0448\u044c \u0441\u0443\u043f \u0432\u0438\u043b\u043a\u043e\u0439 \u043e\u043d \u0443\u0442\u0435\u043a\u0430\u0435\u0442?<br \/><\/strong><em>\u0423\u0442\u0435\u0447\u043a\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 fork() \u0438 \u043a\u0430\u043a \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0443 \u0432\u0438\u043b\u043a\u0438 \u0442\u0440\u0438 \u0437\u0443\u0431\u0430?<br \/><\/strong><em>\u0412\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 fork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u0434\u0435\u043c\u043e\u043d\u043e\u0432 \u0432\u0438\u043b\u043a\u043e\u0439?<br \/><\/strong><em>\u0417\u0430\u043f\u0443\u0441\u043a \u0434\u0435\u043c\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 fork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0438\u043b\u043a\u043e\u0439 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0442\u0430\u0440\u0435\u043b\u043a\u0443?<br \/><\/strong><em>\u041f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0442\u044c \u0432\u0438\u043b\u043a\u0435?<br \/><\/strong><em>\u0412\u0437\u0430\u0438\u043c\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 fork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0438\u043b\u043a\u043e\u0439 \u043a\u043e\u0433\u0434\u0430 \u0441\u043b\u043e\u043c\u0430\u043b\u0430\u0441\u044c \u0440\u0443\u0447\u043a\u0430?<br \/><\/strong><em>\u0421\u0430\u043c\u043e\u043b\u0438\u043a\u0432\u0438\u0434\u0430\u0446\u0438\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u043e\u0433\u043e<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0432\u0438\u043b\u043a\u0438?<br \/><\/strong><em>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f pthread_atfork()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u043f\u043e\u0446\u0430\u0440\u0430\u043f\u0430\u0442\u044c \u043e\u043a\u043d\u043e \u0432\u0438\u043b\u043a\u043e\u0439?<br \/><\/strong><em>\u0417\u0430\u043f\u0443\u0441\u043a \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0434 Windows-\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0438\u043b\u043a\u043e\u0439?<br \/><\/strong><em>\u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u0430\u043c \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f system()<\/em><\/p>\n<\/li>\n<li>\n<p><strong>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435.<br \/><\/strong><em>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044b<\/em><\/p>\n<\/li>\n<\/ol>\n<h4>\u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/h4>\n<p>\u0412\u043e\u0439\u0434\u0435\u043c \u0432 <a href=\"https:\/\/stackoverflow.com\/questions\/5460421\/how-do-you-write-a-c-program-to-execute-another-program\/5460448\" rel=\"noopener noreferrer nofollow\">hivemind<\/a> \u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441 &#171;\u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438\u0437 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b?&#187;. \u0418, \u043e \u0447\u0443\u0434\u043e, \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u0438\u0434\u0438\u043c \u043e\u0442\u0432\u0435\u0442 (\u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0446\u0435\u043d\u043e\u043a):<\/p>\n<pre><code class=\"cpp\">#include &lt;stdio.h> #include &lt;stdlib.h> #include &lt;unistd.h> \/* for fork *\/ #include &lt;sys\/types.h> \/* for pid_t *\/ #include &lt;sys\/wait.h> \/* for wait *\/  int startup() {     \/*Spawn a child to run the program.*\/     pid_t pid=fork();     if (pid==0) { \/* child process *\/         static char *argv[]={\"echo\",\"Foo is my name.\",NULL};         execv(\"\/bin\/echo\",argv);         exit(127); \/* only if execv fails *\/     }     else { \/* pid!=0; parent process *\/         waitpid(pid,0,0); \/* wait for child to exit *\/     }     return 0; } <\/code><\/pre>\n<p>\u041d\u0443, \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043c\u0435\u043d\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0441\u0430\u043c\u0443\u044e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0442\u043e \u0442\u0430\u043a (\u043d\u0435\u0442, \u043d\u0443 \u0432\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c (\u0432\u0440\u043e\u0434\u0435 cygwin \u0438\u043b\u0438 WSL) \u0438 &#171;\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434):<\/p>\n<pre><code class=\"cpp\">#include &lt;Windows.h>  void startup(LPCSTR lpApplicationName) {     \/\/ additional information     STARTUPINFOA si;     PROCESS_INFORMATION pi;      \/\/ set the size of the structures     ZeroMemory(&amp;si, sizeof(si));     si.cb = sizeof(si);     ZeroMemory(&amp;pi, sizeof(pi));      \/\/ start the program up     CreateProcessA     (         lpApplicationName,   \/\/ the path         argv[1],             \/\/ Command line         NULL,                \/\/ Process handle not inheritable         NULL,                \/\/ Thread handle not inheritable         FALSE,               \/\/ Set handle inheritance to FALSE         CREATE_NEW_CONSOLE,  \/\/ Opens file in a separate console         NULL,                \/\/ Use parent's environment block         NULL,                \/\/ Use parent's starting directory          &amp;si,                 \/\/ Pointer to STARTUPINFO structure         &amp;pi                  \/\/ Pointer to PROCESS_INFORMATION structure     );         \/\/ Close process and thread handles.          CloseHandle(pi.hProcess);         CloseHandle(pi.hThread); } <\/code><\/pre>\n<p>\u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e, \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043b\u044e\u0441\u043e\u0432.<\/p>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u044f (\u0438\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430\u0443\u0433\u0430\u0434) \u0431\u0443\u0434\u0435\u0442<\/p>\n<pre><code class=\"cpp\">int result = system(\"C:\\\\Program Files\\\\Program.exe\"); <\/code><\/pre>\n<p>&#8230;\u0447\u0442\u043e \u0432\u0435\u0440\u043d\u043e \u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u00b9. <br \/>\u00b9\u041e\u043f\u0443\u0441\u0442\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0448\u0435\u0439.<\/p>\n<p>\u041d\u043e \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u044f \u0441\u043a\u0430\u0436\u0443 \u0432\u0430\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0435\u0440\u043d\u044b\u043c\u0438?<\/p>\n<h3>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u043f\u0438\u043d\u0433\u0432\u0438\u043d\u0430 \u0432\u0438\u043b\u043a\u043e\u0439?<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Linux \u0441\u0438\u0441\u0442\u0435\u043c. \u0415\u0441\u043b\u0438 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0443\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u0441\u0442\u044b\u043b\u0438, \u0442\u043e \u043e\u043d\u043e \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (fork).<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u043d\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 (exec).<\/p>\n<\/li>\n<\/ol>\n<p>&#171;\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430&#187; \u0437\u0432\u0443\u0447\u0438\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043a\u0443 \u0432\u0438\u043b\u043a\u0438 \u043c\u044b \u0431\u044b \u043e\u0442\u0437\u0435\u0440\u043a\u0430\u043b\u0438\u043b\u0438 \u043f\u0435\u0440\u0432\u0443\u044e, \u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u0442\u0435\u0440\u043b\u0438 \u0435\u0451 \u0438 \u043d\u0430 \u0435\u0451 \u043c\u0435\u0441\u0442\u0435 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438 \u0440\u0443\u0447\u043a\u0443.<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<pre><code>The child process is created  with  a  single  thread\u2014the  one  that called  fork().   The  entire virtual address space of the parent is replicated in the child, including the states of mutexes,  condition variables,  and other pthreads objects; the use of pthread_atfork(3) may be helpful for dealing with problems that this can cause.         (man 2 fork) <\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u044f\u0434\u0440\u0443 &#171;<em>\u044d\u0439 \u0442\u044b, \u0437\u0430\u043f\u0443\u0441\u0442\u0438 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438 \u0434\u0430\u0439 \u043c\u043d\u0435 \u0435\u0433\u043e ID<\/em>&#171;, \u0432\u0435\u0434\u044c \u0442\u0430\u043a \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u043c\u043d\u043e\u0433\u043e &#171;\u0434\u0435\u0448\u0435\u0432\u043b\u0435&#187;, \u0447\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043c\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435. \u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0447\u0435\u043d\u044c <a href=\"https:\/\/www.bell-labs.com\/usr\/dmr\/www\/hist.html\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0441\u0442<\/a>:<\/p>\n<blockquote>\n<p>\u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 (\u0434\u043e fork()) \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430\\\u0432\u044b\u0432\u043e\u0434\u0430, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0430 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443-\u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043c\u0435\u0449\u0430\u043b\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438. \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b exit() \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0448\u0430\u0433\u0443, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438. <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445, \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438 fork(), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0438\u043c\u0435\u0432\u0448\u0438\u0439\u0441\u044f \u043a\u043e\u0434 \u0437\u0430\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u0442\u043e\u043e, \u0447\u0442\u043e \u043f\u043e\u0437\u0436\u0435 \u0441\u0442\u0430\u043b\u043e exec()). \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u0432 27 \u0441\u0442\u0440\u043e\u043a \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 fork() \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 (\u0441\u043c. \u0433\u043b\u0430\u0432\u0443  <strong>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u043a\u043e\u0440\u043e\u0432\u0443 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u0438\u043b\u043a\u0430?<\/strong>) \u043f\u0430\u043c\u044f\u0442\u044c \u0440\u043e\u0434\u0438\u0442\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432\u00b9.<\/p>\n<\/blockquote>\n<p>\u00b9\u0410 \u0442\u0430\u043a \u043a\u0430\u043a \u0432 UNIX &#171;\u0432\u0441\u0451 \u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b&#187; \u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f &#171;\u0444\u0430\u0439\u043b\u043e\u0432&#187;, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B9_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443, \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441 \u0431\u0438\u0442\u043e\u043c subreaper, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430, \u0444\u043b\u0430\u0433\u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432, \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0435\u0449\u0435 \u0434\u0435\u0441\u044f\u0442\u043e\u043a &#171;\u043d\u0443 \u0442\u043e\u0447\u043d\u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 NULL&#187;?<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u0438.<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u0434 Windows \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/processthreadsapi\/nf-processthreadsapi-createprocessa\" rel=\"noopener noreferrer nofollow\">CreateProcess<\/a>  \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 9 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 4 &#8212; \u044d\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, 1 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u043e\u043a \u0438 1 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043c\u0430\u0441\u043a\u0443. \u0418 \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0442\u043e? \u042d\u0442\u043e\u0433\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0412 Linux (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u0432 UNIX) \u0442\u0430\u043a\u043e\u0439 <a href=\"https:\/\/man7.org\/linux\/man-pages\/man2\/clone.2.html\" rel=\"noopener noreferrer nofollow\">\u0432\u044b\u0437\u043e\u0432<\/a> \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0438 \u043c\u044b \u0435\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u043a\u043e\u043b\u043e \u0441\u043e\u0442\u043d\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u043d\u0430\u0434\u0435\u0436\u0434\u0435 \u0447\u0442\u043e \u0447\u0435\u0440\u0435\u0437 10-20-30-40 \u043b\u0435\u0442 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u0440\u043e\u0432\u044c \u0438\u0437 \u043d\u043e\u0441\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0438 \u0437\u0432\u0443\u0447\u0438\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0434\u0430\u0436\u0435 \u0432 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u0438 &#171;\u0441\u043d\u043e\u0441\u043e\u043a&#187;.<\/p>\n<h3>\u041a\u0430\u043a \u043a\u0443\u0448\u0430\u0442\u044c \u043a\u043e\u0440\u043e\u0432\u0443 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u0438\u043b\u043a\u0430?<\/h3>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>CoW (\u0438\u043b\u0438 Copy-on-Write) &#8212; \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043a \u0432\u044b\u0437\u043e\u0432\u0443 fork(). \u0415\u0433\u043e \u0441\u0443\u0442\u044c \u0442\u0430\u043a\u043e\u0432\u0430, \u0447\u0442\u043e \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b (<em>write<\/em>) \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b (<em>copy<\/em>). \u0415\u0441\u043b\u0438 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u043e \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u043f\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. <\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0430\u043c \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 (\u043d\u0435-)\u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0435\u043c\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430, \u0430 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0445\u043e\u0447\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c) \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0432\u0448\u0435\u043c\u0443 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D1%82%D0%BA%D0%B0%D0%B7_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B\" rel=\"noopener noreferrer nofollow\">\u043e\u0442\u043a\u0430\u0437\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b<\/a>  (\u0441\u043c. \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0432 &#171;\u043b\u0435\u0433\u043a\u043e\u043c&#187; \u043e\u0442\u043a\u0430\u0437\u0435):<\/p>\n<blockquote>\n<p>\u041e\u0442\u043a\u0430\u0437 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445: <br \/>* \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c).<\/p>\n<\/blockquote>\n<p>\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c? \u041e\u0442\u0432\u0435\u0442 \u043f\u0440\u043e\u0441\u0442 \u0434\u043e \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 &#8212; \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f fork() \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u044f\u043b\u0430\u0441\u044c \u0432 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430\u0445, \u0430 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u043f\u0430\u043c\u044f\u0442\u0438 &#8212; (\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e) \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432 1969\u043c.  \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u0441\u043e\u0442\u043d\u044f\u043c\u0438 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442 \u0438 \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u044d\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u043e \u0431\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u0430\u043c\u043e\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442<\/p>\n<\/th>\n<th>\n<p>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 (MHz)<\/p>\n<\/th>\n<th>\n<p>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 (GB\/s)\u00b9<\/p>\n<\/th>\n<th>\n<p>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0434\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c 150 GB<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p>DDR4<\/p>\n<\/td>\n<td>\n<p>2133<\/p>\n<\/td>\n<td>\n<p>17<\/p>\n<\/td>\n<td>\n<p>8.8 c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<p>2400<\/p>\n<\/td>\n<td>\n<p>19.2<\/p>\n<\/td>\n<td>\n<p>7.8 c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<p>2666<\/p>\n<\/td>\n<td>\n<p>21.3<\/p>\n<\/td>\n<td>\n<p>7.0 c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<\/td>\n<td>\n<p>3000<\/p>\n<\/td>\n<td>\n<p>25.6<\/p>\n<\/td>\n<td>\n<p>5.8 c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>DDR5<\/p>\n<\/td>\n<td>\n<p><a href=\"https:\/\/www.techtimes.com\/articles\/264440\/20210822\/samsung-ddr5-ram-7200-mhz.htm\" rel=\"noopener noreferrer nofollow\">7200<\/a><\/p>\n<\/td>\n<td>\n<p>51.2<\/p>\n<\/td>\n<td>\n<p>2.9 c<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u00b9 <em>\u041f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0447\u0442\u043e \u0432\u044b \u0442\u0430\u043c \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442, \u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0437\u0430\u044f\u0432\u0438\u043b \u0447\u0435\u0441\u0442\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.<\/em><\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f &#8212; vfork(). \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 vfork \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043d\u0438\u0442\u044c \u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0443\u0434\u0430 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 &#171;\u043f\u0440\u043e\u0446\u0435\u0441\u0441&#187; \u043d\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 execve, _exit \u0438\u043b\u0438 \u043d\u0435 \u0443\u043f\u0430\u0434\u0435\u0442, \u0443\u0431\u0438\u0442\u044b\u0439<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-329558","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/329558","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=329558"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/329558\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=329558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=329558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=329558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}