http://luoguochun.cn/2014/07/04/set-proccess-title/
我們平時ps進程時,顯示的進程標題是我們輸入的程序名以及一些參數。這種顯示方式並非非常直觀,我們需要一種方式可以設置程序的標題,一眼就知道該進程時什麼鳥。如redis或nginx:
root 8527 1 0 10:30 ? 00:00:00 nginx: master process nginx
nginx 8528 8527 0 10:30 ? 00:00:00 nginx: worker process
實現的原理非常簡單,我們只需要修改argv[0],說指向的那段內存空間的內容即可。但是為了使程序的正常邏輯不受影響,事先要把原理的內容保存起來,並通過原來的方式可以訪問。
argv[0]所指向的的空間是和·enviorn·所指向的內存空間是連續的,在程序啟動的時候,系統已經設置好這些空間了。如圖所示:
那麼,1. 我們只需要重新分配空間(不一定是連續的)來存儲這些內容,將地址分別復制給argv
或environ
數組,這樣原來程序的流程不受影響。2. 我們可以在原agv
最開始的地方和environ
最結尾的地方,隨便設置你顯示的內容即可,也就是圖中./exe
開始的地方和Env5=val5
最後一個0結尾復的地方。只需要注意到,設置的內容必須與0結尾,而且不能超過該內存空間。
redis的實現在setproctitle裡面。只是實現有點疑惑:
雖然redis非常出名,但是redis的代碼貌似不是很規范……或者是我們一直接觸的就不規范,哈……