next up previous
Next: 能不能在一個 process 和 terminal 的連接已經斷掉之後再接回來,例如 在 background Up: 自以為已經知道所有答案的人可能會問的高級問題 Previous: 我要如何得知有哪些 process 開了某一檔案,或者某一 process 正在使用哪一個 fileystem(以至於我無法 unmount 這個 filesystem)?

我要怎麼知道是誰在 finger 我啊?

一般來說,你是無法找出在遠端機器 finger 你的那個人的 userid 的。你大概 只能找出在從哪台機器 finger 的。另外有一種可行的方法,如果你的系統支援 並且假設 finger daemon 不反對的話,那麼可以把你的 .plan 檔用 "named pipe" 而不用一般的文字檔。(用 'mknod' 來造)

接下來,你執行一個程式去寫(open for writing)你的 .plan 檔;但是由於 你的 .plan 是一個 "named pipe",所以這個開檔的動作要一直等到有其他的 process 去讀(open for reading)你的 .plan 檔時才會成功。現在你就可以 任意地把你所想讓人 finger 到的 .plan 內容寫入這個 pipe。在 comp.sources.misc, volumn 41 中有個 "planner" 的程式可以做這件事。

當然,如果你的系統不支援 "named pipe",或是你所用的 finger 程式只接受 純文字的 .plan 檔,那麼以上的方法就行不通了。

你的程式也可以藉由查看 "netstat" 的輸出,來找出這次的 finger 是從那裡 連過來的,但是這並無法看出遠端執行 finger 的人是誰。

想要知道遠端的人是誰,必須要遠端的機器有跑支援如 RFC 931 的識別程式才 行。

現在,在常見的 BSD 系統上就有三種 RFC 931 的實做程式,同時也有許多的 應用程式(如 wuarchive ftpd)支援。如果你想得到更多有關 RFC 931 的資 訊,可以加入 rfc931-user 的 mailing list, rfc931-users-request@kramden.acf.nyu.edu。

另外還有三個注意事項。第一,有許多的 NFS 系統無法正確地處理 "named pipe"。這個意思是,當你要去讀放在另一部機器上的 pipe 時,可能會被系統 block 住直到time out,或是因為 pipe 的檔案長度是 0 所以系統就不把它的 內容列出來。

第二,在許多的系統中,fingerd 會在讀 .plan 檔之前先去檢查它裡面是否真 的有資料並且是可以讀的。這樣就會造成遠端 finger 你的人根本就看不到你 的 .plan 檔,因為你的 .plan 長度是 0。

第三,支援 "named pipe" 的系統通常在同一個時間裡只允許系統中存在某個固 定數目的 pipes,檢查 kernel 的 config 檔和 FIFOCNT 選項即可得知。如果 系統中的 pipe 數目超過了 FIFOCNT,那麼系統就會暫停所有新的 pipe 直到有 人關掉他先前所開的 pipe。這是因為 pipe 所用到的 buffer 是放在 non-paged 的記憶體中。



Tan Koan-Sin
1999-03-02