Command-Line

為什麼 argv 包含程序名稱?

  • April 30, 2017

典型的 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 上的此答案

把所有這些放在一邊:在/procargv[0]. 那有什麼好處呢?

  • 一些程序根據呼叫它們的名稱自定義它們的行為(通常通過符號或硬連結,例如BusyBox 的實用程序;在此問題的其他答案中提供了更多範例)。
  • 此外,通過 syslog 記錄的服務、守護程序和其他程序通常會將其名稱添加到日誌條目中。沒有這個,事件跟踪將變得幾乎不可行。

引用自:https://unix.stackexchange.com/questions/315812