被杀后还会使用同一个pid吗?

被杀后还会使用同一个pid吗?

我使用编辑器打开了一个文件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 可以随时重复使用。

您在该输出中看到的是创建该文件的进程.swp1466.这并不一定意味着该过程仍然存在。
请记住,该文件是静态的,它不会仅仅因为打开它的进程死亡而改变。因此,如果 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

相关内容