默認 ps 顯示的進程名為可執行文件路徑及參數,不直觀。Redis、Nginx 等通過修改標題實現「master process」、「worker process」等語義化標識,便於運維識別。
argv[0] 指向的內存區域與 environ 環境變量區域在進程啟動時連續分配。修改思路有二:
argv 和 environ 指向的字符串拷貝到新分配的內存,再修改原區域內容,不影響原邏輯訪問。argv[0] 起始處至 environ 末尾的連續區域寫入新標題,需以 \0 結尾且不超出邊界。Redis 在 setproctitle 中採用原地修改法,將新標題寫入 argv[0] 起始的連續空間,並保存原參數以備他用。

argv+environ 總空間。argv[0] 指向的內容改變,但 argv 數組指針本身不變,原代碼邏輯不受影響。setproctitle 系統調用更簡便。