В Linux новый процесс создается с помощью fork()
, что делает дочерний процесс практически идентичным родительскому процессу. Чтобы создать новый процесс, программа которого отличается от программы исходного процесса, новый дочерний процесс немедленно вызывает execve()
, что в основном является процессом, говорящим «заменить мою текущую программу этой другой программой».
brk(NULL)
— это процесс, который спрашивает, где заканчивается его куча памяти . Многие программы называют это своим первым системным вызовом (, который появится сразу после execve()
), потому что они используют malloc()
сразу (или вызов библиотеки, который они делают, использует malloc()
внутренне ). Если программе и ее библиотечным вызовам некоторое время не нужно вызывать malloc()
, тогда вторым системным вызовом будет что-то кроме brk(NULL)
.