Допустим, в фоновом режиме выполняется /usr/local/bin/ruby
, а затем мы перезаписываем ruby
другой версией или даже удаляем ruby
.
Что будет с этими запущенными процессами ruby?
Это зависит от того, как именно исполняемый файл обновляется. Если открыть тот же файл и изменить его части, произойдут плохие вещи. Если он удаляется, файл удаляется из структуры каталогов файловой системы, но на самом деле не связывается (то есть удаляется) до тех пор, пока последний процесс, открывший его, не выполнит его, не завершится. Таким образом, если исполняемый файл удален, а на его месте написан новый с тем же именем, старый должен продолжать работать нормально.
Они будут продолжать идти. Может быть, ужасно потерпеть крах, если они попытаются получить доступ к себе и получить что-то совершенно не так. Я бы не стал этого делать, если бы мне не пришлось :)
Насколько я понимаю, в ядре Linux есть компонент, называемый загрузчиком, который открывает сам исполняемый файл, содержащий изображение, во время процесса загрузки / компоновки, а после завершения ссылок на библиотеки и т.д. Загрузчик закрывает файл. Таким образом, этот процесс происходит и завершается к тому моменту, когда ядро фактически запускает процесс.
Я не уверен, нужно ли ссылаться на исходный исполняемый файл на диске, если позже исполняемый файл пытается импортировать внешние библиотеки.
Я бы сказал, и по моему опыту, если вы удалите исполняемый файл на диске, исполняемый файл, загруженный в память, не будет затронут. Аналогичным образом, если исполняемый файл заменяется более новыми версиями, исполняемые в настоящее время не обновляются "автоматически", если они не остановлены и не перезапущены.
У меня были проблемы с RAID-контроллером, из-за которого весь диск, на котором был смонтирован корневой каталог и другие разделы, внезапно начал действовать так, как если бы он был отключен. Не удалось загрузить новые программы, но те, что в памяти, работали нормально, пока им не понадобились файлы с диска.
Что будет с этими запущенными процессами ruby?