{"id":31229,"date":"2019-10-31T21:40:10","date_gmt":"2019-10-31T18:40:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-3-process-api-perevod\/"},"modified":"2019-10-31T21:40:10","modified_gmt":"2019-10-31T18:40:10","slug":"operating-systems-three-easy-pieces-part-3-process-api-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-3-process-api-perevod","title":{"rendered":"Betriebssysteme: Drei einfache St\u00fccke. Teil 3: Prozess-API (\u00dcbersetzung)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Einf\u00fchrung in Betriebssysteme<\/h1>\n<p>\nHallo, Habr! Ich m\u00f6chte Ihnen eine Serie von \u00dcbersetzungen einer interessanten Literatur \u2014 OSTEP \u2014 vorstellen. In diesem Material wird die Funktionsweise von Unix-\u00e4hnlichen Betriebssystemen ziemlich gr\u00fcndlich behandelt, insbesondere die Arbeit mit Prozessen, verschiedenen Planern, Speicher und anderen \u00e4hnlichen Komponenten, die ein modernes Betriebssystem ausmachen. Das Original aller Materialien k\u00f6nnen Sie hier ansehen <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">hier<\/a><\/noindex>. Bitte beachten Sie, dass die \u00dcbersetzung unprofessionell (relativ frei) durchgef\u00fchrt wurde, aber ich hoffe, dass ich den allgemeinen Sinn bewahrt habe.<\/p>\n<p>Die Laborarbeiten zu diesem Thema finden Sie hier:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">Original<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">Original<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">meine pers\u00f6nliche Anpassung<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nAndere Teile:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Teil 1: Einf\u00fchrung<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446866\/\">Teil 2: Abstraktion: Prozess<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/447182\/\">Teil 3: Einf\u00fchrung in die API von Prozessen<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nUnd Sie k\u00f6nnen auch meinen Kanal auf <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">Telegramm<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b>Alarm!<\/b> zu dieser Vorlesung gibt es ein Labor! Siehe <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">GitHub<\/a><\/noindex><\/p>\n<h2>Process API<\/h2>\n<p>Betrachten wir das Beispiel zur Erstellung eines Prozesses in einem UNIX-System. Dies erfolgt \u00fcber zwei Systemaufrufe. <b>fork()<\/b> und <b>exec()<\/b>.<\/p>\n<h3>Aufruf von fork()<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Betriebssysteme: Drei einfache St\u00fccke. Teil 3: Prozess-API (\u00dcbersetzung)\" src=\"\/wp-content\/uploads\/2019\/04\/c0c39726560e18a82ae05a31b43f92c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBetrachten wir ein Programm, das den Aufruf von fork() durchf\u00fchrt. Das Ergebnis seiner Ausf\u00fchrung wird wie folgt sein.<\/p>\n<p><img decoding=\"async\" alt=\"Betriebssysteme: Drei einfache St\u00fccke. Teil 3: Prozess-API (\u00dcbersetzung)\" src=\"\/wp-content\/uploads\/2019\/04\/3ddddbaf5bbb38e9882827da0513805a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZun\u00e4chst betreten wir die Funktion main() und f\u00fchren die Ausgabe einer Zeichenkette auf dem Bildschirm aus. Die Zeichenkette enth\u00e4lt die Prozess-ID, die im Original als <b>PID<\/b> oder Prozessidentifikator bezeichnet wird. Diese ID wird in UNIX verwendet, um auf den Prozess zuzugreifen. Der n\u00e4chste Befehl wird den Aufruf von fork() ausf\u00fchren. In diesem Moment wird eine nahezu exakte Kopie des Prozesses erstellt. F\u00fcr das OS sieht es so aus, als w\u00e4ren zwei Kopien des gleichen Programms gestartet, die ihrerseits die Funktion fork() verlassen werden. Der neu geschaffene Nachfolgeprozess (im Verh\u00e4ltnis zum ihm zugeh\u00f6rigen Elterprozess) wird nicht mehr ab der Funktion main() ausgef\u00fchrt. Es ist wichtig zu beachten, dass der Nachfolgeprozess keine exakte Kopie des Elterprozesses ist; insbesondere hat er seinen eigenen Adressraum, eigene Register, seinen eigenen Zeiger auf die auszuf\u00fchrenden Instruktionen und \u00e4hnliches. Das bedeutet, dass der R\u00fcckgabewert des Aufrufers der Funktion fork() unterschiedlich sein wird. So erh\u00e4lt der Elterprozess als R\u00fcckgabewert die PID des Kindprozesses, w\u00e4hrend das Kind den Wert 0 zur\u00fcckbekommt. Anhand dieser R\u00fcckgabewerte k\u00f6nnen die Prozesse sp\u00e4ter getrennt werden, und jeder kann seine spezifische Aufgabe ausf\u00fchren. Die Ausf\u00fchrung dieses Programms ist dabei nicht strikt definiert. Nach der Aufteilung in zwei Prozesse beginnt das OS, sie zu \u00fcberwachen und ihre Ausf\u00fchrung zu planen. Wenn es auf einem Einzelkernprozessor ausgef\u00fchrt wird, wird einer der Prozesse, in diesem Fall der Elterprozess, die Ausf\u00fchrung fortsetzen, bevor der Nachfolgeprozess die Kontrolle \u00fcbernimmt. Bei einem erneuten Start kann die Situation anders sein.<\/p>\n<h3>Aufruf von wait()<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Betriebssysteme: Drei einfache St\u00fccke. Teil 3: Prozess-API (\u00dcbersetzung)\" src=\"\/wp-content\/uploads\/2019\/04\/abb10671424f1889fbbb3facae739029.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBetrachten wir das folgende Programm. In diesem Programm sorgt der Vorhandensein des Aufrufs <b>wait()<\/b> daf\u00fcr, dass der Elterprozess immer auf den Abschluss des Nachfolgeprozesses wartet. In diesem Fall erhalten wir eine strikte Ausgabe des Textes auf dem Bildschirm.<\/p>\n<p><img decoding=\"async\" alt=\"Betriebssysteme: Drei einfache St\u00fccke. Teil 3: Prozess-API (\u00dcbersetzung)\" src=\"\/wp-content\/uploads\/2019\/04\/7e8ea54531b7717b7b42802550afd27b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Aufruf von exec()<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Betriebssysteme: Drei einfache St\u00fccke. Teil 3: Prozess-API (\u00dcbersetzung)\" src=\"\/wp-content\/uploads\/2019\/04\/dfe3a41c03bc35fd716a1b4c3af68c2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBetrachten wir den Aufruf <b>exec()<\/b>. Dieser Systemaufruf ist n\u00fctzlich, wenn wir ein v\u00f6llig anderes Programm starten m\u00f6chten. Hier werden wir aufrufen <b>execvp()<\/b> zum Starten des Programms wc, das ein Wortz\u00e4hlprogramm ist. Was passiert bei dem Aufruf von exec()? Dem Aufruf werden als Argumente der Name der ausf\u00fchrbaren Datei und einige Parameter \u00fcbergeben. Danach erfolgt das Laden des Codes und der statischen Daten aus dieser ausf\u00fchrbaren Datei und das \u00dcberschreiben des eigenen Segments mit dem Code. Die anderen Speicherbereiche, wie der Stack und der Heap, werden neu initialisiert. Danach f\u00fchrt das Betriebssystem einfach das Programm aus, indem es ihm eine Menge von Argumenten \u00fcbergibt. So haben wir keinen neuen Prozess erstellt, sondern das aktuelle gestartete Programm in ein anderes gestartetes Programm transformiert. Nach dem Aufruf von exec() hat der Kindprozess den Eindruck, dass das urspr\u00fcngliche Programm gar nicht gestartet wurde.<\/p>\n<p>Diese Komplexit\u00e4t beim Start ist f\u00fcr die Unix-Shell vollkommen normal und erm\u00f6glicht es dieser Shell, Code nach dem Aufruf <b>fork()<\/b>, aber vor dem Aufruf <b>exec()<\/b>auszuf\u00fchren. Ein Beispiel f\u00fcr solchen Code k\u00f6nnte die Anpassung der Umgebung der Shell an die Bed\u00fcrfnisse des zu startenden Programms sein, bevor es direkt gestartet wird.<\/p>\n<p><b>Shell<\/b> \u2014 ist nur ein Benutzerprogramm. Es zeigt Ihnen die Eingabeaufforderung und wartet, bis Sie etwas eingeben. In den meisten F\u00e4llen, wenn Sie den Namen des Programms dort eingeben, findet die Shell dessen Speicherort, ruft die Methode fork() auf und ruft dann, um einen neuen Prozess zu erstellen, einen der exec()-Typen auf und wartet auf dessen Ausf\u00fchrung mit dem Aufruf von wait(). Wenn der Kindprozess abgeschlossen ist, kehrt die Shell aus dem Aufruf von wait() zur\u00fcck und zeigt die Eingabeaufforderung erneut an und wartet auf die Eingabe des n\u00e4chsten Befehls.<\/p>\n<p>Die Trennung von fork() &amp; exec() erm\u00f6glicht es der Shell, Folgendes zu tun, zum Beispiel:<br \/>\n<b>wc file &gt; new_file.<\/b><\/p>\n<p>In diesem Beispiel wird die Ausgabe des Programms wc in eine Datei umgeleitet. Die Art und Weise, wie die Shell dies erreicht, ist recht einfach: Beim Erstellen des Kindprozesses schlie\u00dft die Shell den Standardausgabestrom und \u00f6ffnet die Datei <b>exec()<\/b>new_file <b>, sodass die gesamte Ausgabe des sp\u00e4ter gestarteten Programms<\/b>in die Datei anstelle des Bildschirms umgeleitet wird. <b>wc<\/b> wird in die Datei umgeleitet, anstatt auf dem Bildschirm angezeigt zu werden.<\/p>\n<p><b>Unix-Pipeline<\/b> wird \u00e4hnlich umgesetzt, mit dem Unterschied, dass sie den Aufruf pipe() verwenden. In diesem Fall wird der Ausgabe-Stream des Prozesses an die Pipe-Warteschlange angeschlossen, die im Kernel liegt, und der Eingabe-Stream eines anderen Prozesses wird daran angeschlossen.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/447182\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23195,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31229","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-3-process-api-perevod\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 3: Process API (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-3-process-api-perevod\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:40:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:40:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Betriebssysteme: Drei einfache Teile. Teil 3: Prozess-API (\u00dcbersetzung) | ProHoster","description":"Einf\u00fchrung in Betriebssysteme Hallo, Habr! Ich m\u00f6chte Ihnen eine Reihe von Artikel\u00fcbersetzungen einer interessanten Literatur \u2014 OSTEP \u2014 vorstellen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-3-process-api-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 3: Process API (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-3-process-api-perevod","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:40:10+00:00","article:modified_time":"2019-10-31T18:40:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31229","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 05:09:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:20:31","updated":"2026-01-21 05:09:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/31229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=31229"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/31229\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/23195"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=31229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=31229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=31229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}