我使用編輯器開啟了一個檔案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