On Linux/NPTL,線程被創建爲某種進程。設置線程/ proc/PID/cmdline?
我可以看到我的一些過程有一個奇怪的CMDLINE:
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
你有一個想法,我怎麼能做到這一點對我的過程中的每個線程?這對調試非常有幫助。
/我現在調查HAL源
感謝
On Linux/NPTL,線程被創建爲某種進程。設置線程/ proc/PID/cmdline?
我可以看到我的一些過程有一個奇怪的CMDLINE:
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
你有一個想法,我怎麼能做到這一點對我的過程中的每個線程?這對調試非常有幫助。
/我現在調查HAL源
感謝
如果你想以便攜的方式做到這一點,這些東西可以在多種Unix版本中使用,那麼可用選項很少。
你必須做的是,你的調用者進程必須調用exec,argv [0]
參數指向你希望在進程輸出中看到的名稱,而文件名指向實際的可執行文件。
您可以通過使用試着從外殼此行爲:
exec -a "This is my cute name" bash
這將替換一個名爲"This is my cute name"
當前bash進程。
要在C中執行此操作,您可以查看sendmail
的源代碼或任何其他已廣泛移植的軟件,並查找跨操作系統所需的所有變體以支持此操作。
某些操作系統具有setproctitle(3)
API,其他一些操作系統允許您覆蓋argv [0]
的內容並顯示結果。
argv
點,可寫的字符串。只要寫東西,對他們說:
#include <string.h>
#include <unistd.h>
int
main(int argc, char** argv)
{
strcpy(argv[0], "Hello, world!");
sleep(10);
return 0;
}
呸..該代碼是不是很好,關鍵是要重複使用ENVIRON(這裏argv_buffer)指針:
memset (argv_buffer[0] + len, 0, argv_size - len);
argv_buffer[1] = NULL;
任何更好的主意嗎?
這是適用於不同的線程嗎?
相當難看,但我會用它,我猜 – elmarco 2008-09-26 14:44:50
這可能是一個緩衝區溢出。特別是如果你的新字符串比原來的長。你可能會更好地在堆上分配一個新字符串,並將其分配給argv [0] – 2008-09-27 17:27:55