🔧 Programmierung 🕛 vor 2 Monaten 2 Min Lesezeit
0

You have been zigged (series) : Forking a child process

↗ Quelle (dev.to)
🗣️ Stimme:

This program is about the POSIX fork() syscall. Zig favors standard library functions std.process.spawn() and std.process.run() functions instead of using OS specific functions like fork(). The spawn and run functions use appropriate OS specific functions underneath and the code we write can stay OS agnostic. As we already saw the spawn function in blog 13, let's look at run function in this blog. The run function allows the programmer to have more control over the child process than spawn. Lets use it to run another process of the same executable. There are several reasons why one would want to do this.




  1. Fault isolation

  2. Security sandboxing

  3. True hard memory limits



Lets see the code for a program that spins itself up on startup as a worker.




CODE
const std = @import("std");

pub fn main(init: std.process.Init) !void {
const allocator = init.arena.allocator();
// defer init.arena.deinit(); not needed as zig will deinit main arena on exit anyway
const args = try init.minimal.args.toSlice(allocator);
if (args.len == 2 and std.mem.eql(u8, args[1], "--worker=true")) {
var buffer: [1024]u8 = undefined;
var file_writer = std.Io.File.Writer.init(.stdout(), init.io, &buffer);
var stdout_writer = &file_writer.interface;
try stdout_writer.print("Printing from worker process...\n\n", .{});
try stdout_writer.flush();
} else {
var buffer: [1024]u8 = undefined;
var file_writer = std.Io.File.Writer.init(.stdout(), init.io, &buffer);
var stdout_writer = &file_writer.interface;
try stdout_writer.print("Printing from main process...\n\n", .{});
try stdout_writer.flush();

const argv = &.{ "./worker__main", "--worker=true" };
_ = try std.process.spawn(init.io, .{ .argv = argv, .stdout = .inherit });
}
}






We can build executable using zig build-exe -O ReleaseSafe worker__main.zig, which will create worker__main. When we execute it using ./worker__main, we ll see




CODE
Printing from main process...

Printing from worker process...







Thanks for reading. To be continued.

Vollständiger Original-Artikel
Den kompletten Beitrag mit allen Details direkt auf dev.to lesen.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
2 Quellen
CVE-2024-45058 | portabilis i-educar up to 2.8 Setting educar_usuario_cad.php authorization
1 Quelle
Kompakte 10.000-mAh-Powerbank für weniger als 10 Euro bei Amazon Haul
1 Quelle
Bessere Grafik in Spielen: So steigern Sie die Bildqualität ohne FPS-Verlust
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten You have been zigged (series) : Forking a child process

Thematisch verwandte Begriffe: have, been, zigged, series · 6 Treffer

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...