Почему этот исполняемый файл все еще выполняется после того, как я удалил его?

Я удалил исполняемый файл, так почему он все еще работает?

root@raspberrypi:/test# ls -la total 11096 drwxrwxrwx 2 pi pi 4096 Mar 12 18:26 . drwxrwxr-x 11 pi pi 4096 Feb 28 13:50 .. -rwxrw-rw- 1 pi pi 12149 Feb 28 13:00 .cproject -rwxrw-rw- 1 pi pi 3183 Mar 12 18:26 main.cpp -rwxrw-rw- 1 pi pi 2169 Feb 28 14:28 main.cpp~ -rwxrw-rw- 1 pi pi 1862 Feb 28 13:20 original.cpp -rwxrw-rw- 1 pi pi 984 Feb 28 13:09 .project -rwxrw-rw- 1 pi pi 11323309 Jan 28 12:54 teatro.png root@raspberrypi:/test# ./testedfb running... 

–Обновить:

  • Как связать файл журнала с / dev / null и восстановить автоматически используемое пространство
  • Найти файлы между двумя папками в linux?
  • Как переименовать имя файла с помощью 'или? в имени файла?
  • Что означает «липкий бит» в NFS?
  • Как запретить пользователям удалять каталог?
  • Разархивировать файл .gz без удаления gzip-файла
  • Некоторое время спустя (после того, как я попытался скомпилировать снова, но есть ошибка, и исполняемый файл не был создан), поведение изменилось на:

     root@raspberrypi:/test# ./testedfb bash: ./testedfb: No such file or directory 

    Но мне все еще любопытно; почему он бежал?

    –update (2):

    Просто случилось снова, и я сделал тест:

     root@raspberrypi:/test# killall -9 testedfb testedfb: no process found root@raspberrypi:/test# ./testedfb running... 

    И он все еще работает …

    Я нахожусь в баре малины.

    –update (3):

    Это просто произошло сейчас, файл был там, но он не был найден:

     root@raspberrypi:/test# ./testedfb bash: ./testedfb: No such file or directory root@raspberrypi:/test# ls main.cpp main.cpp~ original.cpp teatro.png testedfb 

    (и при следующей попытке он действительно запустился)

    Может быть, это NFS (эта папка установлена), которая слишком медленно обновляется? (спасибо @derobert за вопрос о файловой системе) – это ответ на этот второй случай, а не первый, поскольку я не могу видеть исполняемый файл, но все же я могу его выполнить … (и похоже, что процесс тоже не работает)

  • Как переименовать файлы со странными символами
  • Сервер NFS вызывает высокую нагрузку даже в режиме ожидания
  • Переименование файлов с помощью списка
  • Перенаправить stdout и stderr и переопределить опцию noclobber
  • В чем разница между `fallocate -dig-holes` и` fallocate -punch-hole` в Linux?
  • Как найти отсутствующие файлы с последовательными именами?
  • 3 Solutions collect form web for “Почему этот исполняемый файл все еще выполняется после того, как я удалил его?”

    Чтобы запустить программу, она открывается ядром (или его интерпретатором). Пока он запущен, файл остается открытым.

    Удаление файла, открытого в Unix, удаляет его имя с диска, сам файл удаляется только после его закрытия.

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

    Программа работает в памяти, удаление ее с диска обычно не влияет на остановку программы.

    Вам нужно явно убить программу с помощью killall testedfb или если она не реагирует на этот killall -9 testedfb .

    Похоже, что это проблема синхронизации папки NFS.

    Если я создам исполняемый файл на сервере NFS, он будет отображаться / выполняться локально только после команды ls .

    Если я удалю исполняемый файл на сервере NFS, он все равно выполняется локально, событие после команды ls показывает, что файла нет. Но если я удалю исполняемый файл локально (в той же папке NFS), он не будет найден для выполнения снова.

    (очистить: «локально» я имею в виду на клиентском терминале малины, а не на сервере NFS-сервера)

    Linux и Unix - лучшая ОС в мире.