DEV Community

Discussion on: Execute a child process that is not on the filesystem but in memory?

Collapse
 
hoelzro profile image
Rob Hoelz

I'd have to try this out, but on Linux, you should be able to use memfd_create to create a file handle to a chunk of memory, use file I/O to write to it, and use fork + execve + /dev/fd/{file_descriptor_number} to run the program. I don't know how the region of memory allocated by memfd_create and execve would interact, but I think it should work fine! If not, you could always create a temporary file, unlink it, and then use the same fork + execve + /dev/fd/{file_descriptor_number} trick.

Out of curiosity, what made you think of this? Why would you like to avoid the filesystem?

Collapse
 
jochemstoel profile image
Jochem Stoel

Initially I wanted to measure the performance difference of (repeatedly) executing from RAM rather than filesystem but now it has become somewhat of an obsession and I just have to know if it is possible and how to do it.

Do you know the Windows equivalent (if any) of what you are describing?

Collapse
 
hoelzro profile image
Rob Hoelz

I'm sorry - my experience with programming on Windows is very limited. A cursory look at CreateProcess seems to hint that the program needs to reside on the filesystem.

Regarding the performance difference, I would expect that if you're starting the same program repeatedly, any advantage you would gain from loading the program image from RAM would be made up, since the program and its libraries would all likely be in the OS' filesystem cache after the first run. But, I haven't measured this, so I can't say for sure!