Ich schreibe eine einfache Shell als eine OS-Kurszuweisung, ich muss im PATH nach dem eingegebenen Programmbenutzer suchen, sobald ich das richtige Verzeichnis gefunden habe, malloc ich ein Stück Speicher gerade genug, um das Verzeichnis zu halten Name plus den Programmnamen, und ich gebe es als erstes Argument an execv ().
Ich hätte etwa 100 Zeichen statisch zuordnen können, aber wenn ich ein Limit habe, fühle ich mich unwohl. Wenn also execv () ausgeführt wird, wird der Heap aufgeräumt oder ist dieser Speicher verloren?
Es ist vielleicht nicht viel Speicher, aber ich bin nur neugierig.
Wenn Sie exec()
, der gesamte Prozess ist (a) beendet, so alle Ressourcen einschließlich dynamischer Speicher und einige FDs wie unten, werden vom Betriebssystem zurückgewonnen, und (b) ersetzt: Code, Daten, Threads,. ..
Re Dateideskriptoren, aus "man execve"
:
Im aufrufenden Prozessbild geöffnete Dateideskriptoren bleiben im neuen geöffnet Prozessabbild, außer denen, für die das Close-on-Exec-Flag gesetzt ist (Siehe schließen (2) und fcntl (2)). Descriptors, die offen bleiben, sind nicht betroffen von execve ().
Tags und Links c linux operating-system