我需要用C語言來修改我的程序的進程名稱。
我確切地說,這不是我想改變的線程的名稱。
我想改變我的程序的名稱,但我發現唯一的解決辦法,就是修改的argv[0]
值。
我還發現了prctl(PR_SET_NAME, "newname")
的另一個解決方案,但此解決方案無效。改革進程名稱[0]在Linux中
回答
調用prctl
和修改argv[0]
之間的差異是:
- 修改
argv[0]
在/proc/$pid/cmdline
- 調用
prctl(PR_SET_NAME)
改變信息改變/proc/$pid/status
信息,這意味着你將得到的差異名字你處理髮行ps -a
和ps -ax
。
如果您在執行ps時期望不同參數的進程名稱相同,則可以同時執行它們(即更改argv[0]
並調用prctl
)。
希望的答案幫助。
試試這個:
char *process_name = "aaa\0";
memcpy((void *)argv[0], process_name, sizeof(process_name));
/* 解釋: 分配給argv的空間[0]可能比你想給的名字更小,那麼你將被overwritting一些其他無關的記憶。 argv [0]大小可能僅爲2,如果進程名稱爲「averylongprocessname」,則會溢出argv [0]。你需要strlen(argv [0])並在memcpy中使用它。 THX @ecerulm
*/
的我PR_SET_NAME標誌被支撐認爲\ 0是不必要的 - 是不是已經悄悄地追加到字符串的字符串? – Chap 2014-04-30 04:09:29
@Chap:'strcpy'不是'memcpy'。 – 2014-09-01 18:06:44
似乎你必須覆蓋所有來自'argv [0]'的字符,這是真的嗎?所以你不能擁有比原名更大的進程名稱 – 2015-02-24 10:05:01
- 1. 在Linux中更改進程名稱
- 2. Linux中的pid進程名稱
- 3. 在Linux上更改線程名稱(htop)
- 4. 在C#中更改進程名稱?
- 5. 如何在Linux下更改haskell進程的名稱
- 6. 獲取模塊名稱和進程名稱在LINUX C++
- 7. 程序名稱[0]
- 8. 在運行時更改進程名稱
- 9. linux在內核中從pid獲取進程名稱
- 10. Linux - 更改CLI中的主機名稱
- 11. 在任務管理器中更改程序進程名稱?
- 12. 在Linux中更改進程標識
- 13. 如何更改進程名稱objective-c
- 14. 更改python腳本的進程名稱
- 15. 更改Python腳本的進程名稱
- 16. 如何在Linux下使用Python獲取進程名稱?
- 17. 在Ubuntu-Linux上獲取給定Java端口的進程名稱?
- 18. Coldfusion進程名稱
- 19. C#名稱進程
- 20. 在任務管理器中更改進程名稱
- 21. 如何在C中更改Solaris上分叉進程的名稱?
- 22. 如何在linux中通過進程名獲取進程ID
- 23. 在android中的聯繫進程名稱
- 24. Linux - 篡改現有進程
- 25. 在Json文件中將名稱更改爲「0」
- 26. android:進程和進程名稱
- 27. 從進程名稱獲取進程ID
- 28. Python多進程處理進程名稱
- 29. 如何在QT中獲取加載進程的進程名稱
- 30. 爲什麼庫名稱在其名稱中另外加上0?
可能重複[如何命名在Linux下一個線程?](http://stackoverflow.com/questions/778085/how-to-name-a-thread-in -linux) – sehe 2013-04-23 09:33:38
_「的文件說PR_SET_NAME設置進程的名稱,但該文檔是錯誤的 - 它實際上是設置線程的名字現在。‘頂’和‘PS -L _ - [user9876’顯示線程的名字。」年04月22 '09在17時39分](http://stackoverflow.com/questions/778085/how-to-name-a-thread-in-linux#comment588964_778124) – sehe 2013-04-23 09:34:13
因爲Linux 2.6.9 – akhil 2013-04-23 09:55:37