Command-Line
為什麼 argv 包含程序名稱?
典型的 Unix/Linux 程序接受命令行輸入作為參數計數 (
int argc
) 和參數向量 (char *argv[]
)。的第一個元素argv
是程序名稱 - 後面是實際參數。為什麼程序名稱作為參數傳遞給執行檔?是否有使用自己名稱的程序範例(可能是某種
exec
情況)?
首先,請注意
argv[0]
不一定是程序名稱。這是呼叫者放入系統呼叫的內容(例如,請參閱Stack Overflow 上argv[0]
的這個問題)。(所有其他變體都不是系統呼叫,而是 的介面。)execve``exec``execve
例如,假設以下(使用
execl
):execl("/var/tmp/mybackdoor", "top", NULL);
/var/tmp/mybackdoor
是執行但argv[0]
設置為 的top
內容,這是ps
或(真實的)top
將顯示的內容。有關更多資訊,請參閱U&L SE 上的此答案。把所有這些放在一邊:在
/proc
像argv[0]
. 那有什麼好處呢?
- 一些程序根據呼叫它們的名稱自定義它們的行為(通常通過符號或硬連結,例如BusyBox 的實用程序;在此問題的其他答案中提供了更多範例)。
- 此外,通過 syslog 記錄的服務、守護程序和其他程序通常會將其名稱添加到日誌條目中。沒有這個,事件跟踪將變得幾乎不可行。