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 询问文件系统) - 这将回答第二种情况,而不是第一种情况,因为我看不到可执行文件,但我仍然可以执行它......(看起来进程也没有运行)
要运行程序,它由内核(或其解释器)打开。只要它正在运行,文件就会保持打开状态。
删除在 Unix 中打开的文件会将其名称从磁盘中删除,文件本身仅在关闭时才会被删除。
将上面两个相加,可以看到正在运行的程序继续使用其程序文件,只有在程序退出时才会删除该文件。
看起来同步 NFS 文件夹时出现问题。
如果我在 NFS 服务器上创建可执行文件,则它仅在命令之后在本地可见/执行ls。
如果我删除 NFS 服务器上的可执行文件,它仍然在本地运行,在命令ls显示该文件不存在之后发生事件。但是,如果我在本地删除可执行文件(在同一个 NFS 文件夹上),它将不会被发现再次执行。
(需要澄清的是:“本地”是指在客户端树莓派终端上,而不是在 NFS 服务器计算机上)