3

Когда исполняемый файл запускается в процессе, если исполняемый файл перезаписывается или удаляется, а затем создается заново при переустановке, будет ли процесс повторно запускать новый исполняемый файл?

Зависит ли ответ на вопрос от

  • запускается ли исполняемый файл как сервис / демон в процессе или нет?

  • операционная система, например, Ubuntu, Windows, ...?

  • происходит ли переустановка из установочного файла (например, из файла deb в Ubuntu, из msi в Windows) или из сборки исходного кода?

Вот некоторые примеры:

  • В Ubuntu, когда процесс запускает исполняемый файл, и когда я перезаписываю исполняемый файл, переустанавливая вручную с помощью configure , make и make install в его исходном коде, процесс все равно продолжает запускать исходный исполняемый файл вместо нового запускаемый файл.

  • Я слышал, что в Windwos 10, когда процесс запускает исполняемый файл как службу, если мы переустанавливаем исполняемый файл через его установочный файл msi , то процесс службы перезапускается для запуска нового исполняемого файла.

Благодарю.

1 ответ1

1

Я не знаю ответа на все ваши (под) вопросы, особенно когда речь идет о службах Windows. Тем не менее я могу объяснить общую разницу между поведением Windows и Linux.

Под "перезаписью" я понимаю запись в уже существующий файл. Альтернативой является удаление старого файла и создание нового файла с тем же именем. Я ожидал бы, что все установщики сделают это последним способом, потому что перезапись работающего кода - трудная задача (и сигнал тревоги для антивируса и т.д.).

Технически это вряд ли когда-либо "перезаписывает". Так что насчет удаления и создания заново?

Файловые системы на основе Inode, такие как семейство ext в Linux, позволяют удалять используемый файл. Windows с NTFS или FAT не ведет себя так. Подробнее здесь: Что Linux делает по-другому, что позволяет мне удалять / заменять файлы, если Windows будет жаловаться, что файл используется в настоящее время?

Установщик в Windows может попытаться изящно (или нет) остановить процессы, которые используют определенный файл, если он знает о них. В противном случае он не сможет выполнить свою работу, потому что файловая система будет запрещать удаление файла. Установщикам Linux вообще не нужно заботиться об этом.

Такое поведение в Linux настолько полезно, что мы склонны эмулировать его для файловых систем, которые сами не поддерживают его. Прочитайте мой ответ на другой вопрос (раздел "контекст") для некоторого понимания.


будет ли процесс повторно запускать новый исполняемый файл?

В общем, нет. Но так как процесс должен быть завершен в Windows, установщик (или сторожевой таймер) может "почувствовать себя обязанным" воскресить его - конечно, с новым исполняемым файлом, потому что старый уже удален. В Linux процесс может запустить исходный исполняемый файл, как будто ничего не произошло. Тем не менее, некоторые установщики в Linux могут перезапускать процессы (например, демоны) для принудительного запуска нового исполняемого файла.

В конце давайте посмотрим, что происходит, когда установщик ленив и выполняет только те задачи, которые необходимы для замены исполняемого файла новым. В Windows он должен убить процесс, а затем заменить файл; процесс больше не В Linux установщик просто заменяет файл, и процесс выживает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .