被殺後還會用同一個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

相關內容