程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 設置進程的名稱

設置進程的名稱

編輯:關於C語言

設置進程的名稱

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. 我們只需要重新分配空間(不一定是連續的)來存儲這些內容,將地址分別復制給argvenviron數組,這樣原來程序的流程不受影響。2. 我們可以在原agv最開始的地方和environ最結尾的地方,隨便設置你顯示的內容即可,也就是圖中./exe開始的地方和Env5=val5最後一個0結尾復的地方。只需要注意到,設置的內容必須與0結尾,而且不能超過該內存空間。

redis如何實現

  redis的實現在setproctitle裡面。只是實現有點疑惑:

簡單吐槽

  雖然redis非常出名,但是redis的代碼貌似不是很規范……或者是我們一直接觸的就不規范,哈……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved