Поскольку это обычный компилятор, который записывает исполняемый файл, давайте следовать за ним в Linux.
Первое, что нужно знать, это то, что имя файла в Linux напрямую не относится к файлу, а скорее к записи в каталоге, которая не зависит от имени файла. Файл не обязательно должен иметь имя файла, но если его нет, будет трудно сослаться на него.
Если процесс использует файл, и вы заменяете или удаляете его, процесс продолжит использовать этот файл через свою запись в каталоге. Любой новый процесс, использующий файл или ищущий его, получит новую версию (если вы заменили ее) или не сможет найти ее (если вы удалили ее). После завершения всех процессов со старым файлом он будет удален из файловой системы.
Поэтому, если вы перекомпилируете и создадите новый исполняемый файл с тем же именем, это не повлияет на запущенный процесс. Он продолжит использовать старый исполняемый файл. Любой новый процесс, который пытается открыть файл, получит новый. Если у вас есть system("foo");
в цикле, каждый раз, когда он выполняет его, он будет видеть, что означает имя файла foo.
Windows обрабатывает файлы по-разному. Как правило, если процесс использует файл, файл блокируется и не может быть удален или заменен.