除了AIX以外,它與Get full path of executable of running process on HPUX…最相似。獲取AIX上正在運行的進程的可執行文件的完整路徑
最基本的問題是:在AIX上,如何確定當前可執行文件的完整路徑?在做任何事情之前必須這樣做(例如,chdir
)是好的。
最準確的答案到目前爲止,我發現是從
svmon -P $$ -O format=nolimit,filename=on,filtertype=client
檢查輸出(其中$$有其殼的意義:當前PID)。這不僅僅是大量的C,而且svmon也不是很快,並且可以輕易地壓倒其他應用程序的運行時間。
下一個最好的答案似乎只是看argv[0]
,如果它有一個斜線,它可以是一個完整的路徑名(以前導符/開頭)或相對於當前目錄名(不是以前導/開頭)。如果它沒有斜線,則與PATH
中的某些內容有關。
如果在這個解決方案之後,我最終得到了一個符號鏈接,那麼也需要處理符號鏈接的所有解決方案(硬鏈接可能超出了任何解決方案的範圍)。這個解決方案看起來像是相對跨平臺的,但在C代碼中也很重(應該比svmon更快)。我期望有種族條件等等來應對。
感謝,
更新:我正在尋找一個解決方案,提交給開發者的Perl。他們會擔心不安全的PATH
,特別是在setuid
/setgid
的情況。見perlsec。我認爲我們在這裏可能會好起來,但如果您將setuid
與僞造argv[0]
結合使用,您可以強制perl認爲它位於其他位置,並加載錯誤的模塊。上面的「下一個最佳」答案只有在不在perl的污染模式下才有效。
退房[這個類似的問題(http://stackoverflow.com/questions/933850/how-to-find-the -location的最可執行-在-C/933996#933996)。 –
檢查http://stackoverflow.com/questions/933850/how-to-find-the-location-of-the-executable-in-c/933996#933996 – karlphillip
我想在圖書館這樣做,這樣我可以把它放在一個錯誤日誌中,我不能合理地要求我的調用者傳入'argv [0]'。 – PJTraill