2008-09-26 45 views
3

On Linux/NPTL,線程被創建爲某種進程。設置線程/ proc/PID/cmdline?

我可以看到我的一些過程有一個奇怪的CMDLINE:

cat /proc/5590/cmdline 
hald-addon-storage: polling /dev/scd0 (every 2 sec) 

你有一個想法,我怎麼能做到這一點對我的過程中的每個線程?這對調試非常有幫助。

/我現在調查HAL源

感謝

回答

6

如果你想以便攜的方式做到這一點,這些東西可以在多種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]的內容並顯示結果。

4

argv點,可寫的字符串。只要寫東西,對他們說:

#include <string.h> 
#include <unistd.h> 

int 
main(int argc, char** argv) 
{ 
    strcpy(argv[0], "Hello, world!"); 
    sleep(10); 
    return 0; 
} 
+0

相當難看,但我會用它,我猜 – elmarco 2008-09-26 14:44:50

+0

這可能是一個緩衝區溢出。特別是如果你的新字符串比原來的長。你可能會更好地在堆上分配一個新字符串,並將其分配給argv [0] – 2008-09-27 17:27:55

0

呸..該代碼是不是很好,關鍵是要重複使用ENVIRON(這裏argv_buffer)指針:

memset (argv_buffer[0] + len, 0, argv_size - len); 
argv_buffer[1] = NULL; 

任何更好的主意嗎?

這是適用於不同的線程嗎?