为什么这个可执行文件在我删除它后仍然执行?

The*_*ent 5 nfs executable files

我删除了可执行文件,为什么它仍在运行?

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...
Run Code Online (Sandbox Code Playgroud)

- 更新:

一段时间后(在我尝试再次编译后,但出现错误,并且未创建可执行文件)行为更改为:

root@raspberrypi:/test# ./testedfb 
bash: ./testedfb: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但我还是很好奇;为什么它在运行?

--更新(2):

刚刚又发生了,我做了测试:

root@raspberrypi:/test# killall -9 testedfb
testedfb: no process found
root@raspberrypi:/test# ./testedfb 
running...
Run Code Online (Sandbox Code Playgroud)

它仍然运行...

我正在使用 Raspberry Pi 的 Bash。

--更新(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
Run Code Online (Sandbox Code Playgroud)

(并且在下一次尝试中它确实运行了)

也许是 NFS(此文件夹已挂载)更新太慢?(感谢@derobert 询问文件系统) - 这将回答第二种情况,而不是第一种情况,因为我看不到可执行文件,但我仍然可以执行它......(看起来进程也没有运行)

von*_*and 5

要运行程序,它由内核(或其解释器)打开。只要它正在运行,文件就会保持打开状态。

删除在 Unix 中打开的文件会将其名称从磁盘中删除,文件本身仅在关闭时才会被删除。

将上面两个相加,可以看到正在运行的程序继续使用其程序文件,只有在程序退出时才会删除该文件。


The*_*ent 3

看起来同步 NFS 文件夹时出现问题。

如果我在 NFS 服务器上创建可执行文件,则它仅在命令之后在本地可见/执行ls

如果我删除 NFS 服务器上的可执行文件,它仍然在本地运行,在命令ls显示该文件不存在之后发生事件。但是,如果我在本地删除可执行文件(在同一个 NFS 文件夹上),它将不会被发现再次执行。

(需要澄清的是:“本地”是指在客户端树莓派终端上,而不是在 NFS 服务器计算机上)