我使用编辑器打开了一个文件vim
。这是在一个ssh
会话中,由于我已经闲置了很长时间,所以会话关闭了,我必须重新建立连接。我使用编辑器再次打开该文件vim
,它报告我说:
E325: ATTENTION
Found a swap file by the name ".latest2.sh.swp"
owned by: ramesh dated: Sun May 11 11:54:08 2014
file name: ~ramesh/latest2.sh
modified: no
user name: ramesh host name: xxx.xxx.edu
process ID: 1466 (still running)
While opening file "latest2.sh"
由于我没有对文件进行太多更改,所以我做了,
kill -9 1466
我检查了该进程是否消失了,
ps -aef | grep ramesh
和PID 1466不在那里。现在,当我再次打开该文件时,它给了我同样的消息,
E325: ATTENTION
Found a swap file by the name ".latest2.sh.swp"
owned by: ramesh dated: Sun May 11 11:54:08 2014
file name: ~ramesh/latest2.sh
modified: no
user name: ramesh host name: xxx.xxx.edu
process ID: 1466
While opening file "latest2.sh"
然而过程却是不在仍在运行中状态。
现在,我有一个关于PID用法。根据维基百科入口,
在 Unix 下,进程 ID 通常是按顺序分配的,从 0 开始,直到最大值,该值因系统而异。一旦达到此限制,分配将从零重新开始并再次增加。但是,对于此遍及后续遍,仍分配给进程的任何 PID 都会被跳过。
现在,假设我已经用完了所有可用的 PID,PID 1466是用过的或者跳过?
因为我已经杀死了它,所以我认为应该使用它。但是,在我第二次尝试打开该文件时,我仍然看到PID 1466。
在这种情况下会发生什么?
答案1
是的,PID 可以随时重复使用。
您在该输出中看到的是创建该文件的进程.swp
是1466
.这并不一定意味着该过程仍然存在。
请记住,该文件是静态的,它不会仅仅因为打开它的进程死亡而改变。因此,如果 1466 被杀死,该文件仍然包含“我正在被 PID 1466 编辑”的信息。 VIM 检查该进程是否仍然存在,并将其指示为(still running)
。
如前所述,另一个进程有可能获得完全相同的 PID。当报告为 时(still running)
,VIM 实际上并不检查该 PID 是否是 VIM 进程。
E325: ATTENTION
Found a swap file by the name ".test.swp"
owned by: root dated: Sun May 11 17:04:36 2014
file name: /tmp/test
modified: no
user name: root host name: whistler
process ID: 21824 (still running)
While opening file "test"
dated: Sun May 11 17:04:36 2014
在本例中,PID 21824 是我启动的 shell。
phemmer 21824 19 0 0.0 0.0 S+ 00:53 bash -c [[ "$$" == 21824 ]] && echo MATCH && sleep 999999