[Pthread] LinuxÉϳÌÐòµ÷ÊԵĻùʯ(Ò»)
ÔÎĵØÖ·£ºhttp://blog.csdn.net/Javadino/archive/2008/09/06/2891413.aspx
Òý×Ó:
1.ÔÚLinuxϵͳÖУ¬½ø³Ì״̬³ýÁËÎÒÃÇËùÊìÖªµÄTASK_RUNNING£¬TASK_INTERRUPTIBLE£¬TASK_STOPPEDµÈ£¬»¹ÓÐÒ»¸öTASK_TRACED¡£Õâ±íÃ÷Õâ¸ö½ø³Ì´¦ÓÚʲô״̬£¿
2.strace¿ÉÒÔ·½±ãµÄ°ïÖúÎÒÃǼǼ½ø³ÌËùÖ´ÐеÄϵͳµ÷Óã¬ËüÊÇÈçºÎ¸ú×Ùµ½½ø³ÌÖ´Ðеģ¿
3.gdbÊÇÎÒÃǵ÷ÊÔ³ÌÐòµÄÀûÆ÷£¬¿ÉÒÔÉèÖöϵ㣬µ¥²½¸ú×Ù³ÌÐò¡£ËüµÄʵÏÖÔÀíÓÖÊÇʲô£¿
ËùÓÐÕâÒ»Çеı³ºó¶¼Òþ²Ø×ÅLinuxËùÌṩµÄÒ»¸öÇ¿´óµÄϵͳµ÷ÓÃptrace().
1.ptraceϵͳµ÷ÓÃ
ptrace
ϵͳµ÷´ÓÃû×ÖÉÏ¿´ÊÇÓÃÓÚ½ø³Ì¸ú×ٵģ¬ËüÌṩÁ˸¸½ø³Ì¿ÉÒÔ¹Û²ìºÍ¿ØÖÆÆä×Ó½ø³ÌÖ´ÐеÄÄÜÁ¦£¬²¢ÔÊÐí¸¸½ø³Ì¼ì²éºÍÌæ»»×Ó½ø³ÌµÄÄں˾µÏñ(°üÀ¨¼Ä´æÆ÷)µÄÖµ¡£Æä»ù
±¾ÔÀíÊÇ:
µ±Ê¹ÓÃÁËptrace¸ú×Ùºó£¬ËùÓз¢Ë͸ø±»¸ú×ÙµÄ×Ó½ø³ÌµÄÐźÅ(³ýÁËSIGKILL)£¬¶¼»á±»×ª·¢¸ø¸¸½ø³Ì£¬¶ø×Ó½ø³ÌÔò»á±»×èÈû£¬Õâʱ×Ó½ø³ÌµÄ״̬¾Í»á±»
ϵͳ±êעΪTASK_TRACED¡£¶ø¸¸½ø³ÌÊÕµ½Ðźź󣬾ͿÉÒÔ¶ÔÍ£Ö¹ÏÂÀ´µÄ×Ó½ø³Ì½øÐмì²éºÍÐ޸ģ¬È»ºóÈÃ×Ó½ø³Ì¼ÌÐøÔËÐС£
ÆäÔÐÍΪ£º
#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
ptraceÓÐËĸö²ÎÊý:
1). enum __ptrace_request request£ºÖ¸Ê¾ÁËptraceÒªÖ´ÐеÄÃüÁî¡£
2). pid_t pid: ָʾptraceÒª¸ú×ٵĽø³Ì¡£
3). void *addr: ָʾҪ¼à¿ØµÄÄÚ´æµØÖ·¡£
4). void *data: ´æ·Å¶ÁÈ¡³öµÄ»òÕßҪдÈëµÄÊý¾Ý¡£
ptraceÊÇÈç´ËµÄÇ¿´ó£¬ÒÔÖÁÓÚÓкܶà´ó¼ÒËù³£ÓõŤ¾ß¶¼»ùÓÚptraceÀ´ÊµÏÖ£¬ÈçstraceºÍgdb¡£½ÓÏÂÀ´£¬ÎÒÃǽèÓɶÔstraceºÍgdbµÄʵÏÖ£¬À´¿´¿´ptraceÊÇÈçºÎʹÓõġ£
2. straceµÄʵÏÖ
strace³£³£±»ÓÃÀ´À¹½ØºÍ¼Ç¼½ø³ÌËùÖ´ÐеÄϵͳµ÷Óã¬ÒÔ¼°½ø³ÌËùÊÕµ½µÄÐźš£ÈçÓÐÕâôһ¶Î³ÌÐò£º
HelloWorld.c:
#include <stdio.h>
int main(){
printf("Hello World!\n");
return 0;
}
±àÒëºó£¬ÓÃstrace¸ú×Ù£º strace ./HelloWorld
¿ÉÒÔ¿´µ½ÐÎÈç:
execve("./HelloWorld", ["./HelloWorld"], [/* 67 vars */]) = 0
brk(0) &
Ïà¹ØÎĵµ£º
·ÃÎÊÎļþ
/etc/host.conf
¸æËßÍøÂçÓòÃû·þÎñÆ÷ÈçºÎ²éÕÒÖ÷»úÃû¡££¨Í¨³£ÊÇ /etc/hosts£¬È»ºó¾ÍÊÇÃû³Æ·þÎñÆ÷£»¿Éͨ¹ý netconf ¶ÔÆä½øÐиü¸Ä£©
/etc/hosts
°üº¬£¨±¾µØÍøÂçÖУ©ÒÑÖªÖ÷»úµÄÒ»¸öÁÐ±í¡£Èç¹ûϵͳµÄ IP ²»ÊǶ¯Ì¬Éú³É£¬¾Í¿ÉÒÔʹÓÃËü¡£¶ÔÓÚ¼òµ¥µÄÖ÷»úÃû½âÎö£¨µã·Ö±íʾ·¨£©£¬ÔÚÇëÇó DNS »ò NIS ÍøÂçÃû³Æ·þÎñÆ÷֮ǰ£¬ ......
The physical memory map for Linux is completely independent from the virtual map and is designed to maximize contiguous space. Given that the kernel image will always be at the start of DRAM, the Linux kernel maximizes contiguous space by allocating runtime memory from the end of physical DRAM movin ......
ÆäÖÐÓÐһЩº¯ÊýµÄ×÷ÓÃÍêÈ«Ïàͬ£¬Ö»ÊDzÎÊý²»Í¬¡££¨¿ÉÄܺܶàÊìϤC++ÅóÓÑÂíÉϾÍÄÜÁªÏëÆðº¯ÊýÖØÔØ£¬µ«ÊDZðÍüÁËLinuxºËÐÄÊÇÓÃCÓïÑÔдµÄ£¬ËùÒÔÖ»
ÄÜÈ¡³É²»Í¬µÄº¯ÊýÃû£©¡£»¹ÓÐһЩº¯ÊýÒѾ¹ýʱ£¬±»ÐµĸüºÃµÄº¯ÊýËù´úÌæÁË£¨gccÔÚÁ´½ÓÕâЩº¯Êýʱ»á·¢³ö¾¯¸æ£©£¬µ«ÒòΪ¼æÈݵÄÔÒò»¹±£Áô×Å£¬ÕâЩº¯ÊýÔÚǰ
Ãæ±êÉÏ“*”ºÅÒÔÊ ......
²ÉÓù²ÏíÄÚ´æÍ¨ÐŵÄÒ»¸öÏÔ¶øÒ×¼ûµÄºÃ´¦ÊÇЧÂʸߣ¬ÒòΪ½ø³Ì¿ÉÒÔÖ±½Ó¶ÁдÄڴ棬¶ø²»ÐèÒªÈκÎÊý¾ÝµÄ¿½±´¡£¶ÔÓÚÏñ¹ÜµÀºÍÏûÏ¢¶ÓÁеÈͨÐÅ·½Ê½£¬ÔòÐèÒªÔÚÄÚ
ºËºÍÓû§¿Õ¼ä½øÐÐËĴεÄÊý¾Ý¿½±´£¬¶ø¹²ÏíÄÚ´æÔòÖ»¿½±´Á½´ÎÊý¾Ý[1]£ºÒ»´Î´ÓÊäÈëÎļþµ½¹²ÏíÄÚ´æÇø£¬ÁíÒ»´Î´Ó¹²ÏíÄÚ´æÇøµ½Êä³öÎļþ¡£Êµ¼ÊÉÏ£¬½ø³ÌÖ®¼äÔÚ¹²
ÏíÄÚ´æÊ±£¬²¢²»×ÜÊ ......
Èç¹û·þÎñÆ÷ÊÇ×Ô¼ºµÄ£¬²¢ÇÒ»úÆ÷¾ÍÔÚÉí±ß£¬ÄÇʲô¶¼²»ÓÃ˵ÁË£¬È±ÉÙgcc¶¥¶à¾ÍÊÇÖØÐ·ÅÈë°²×°ÅÌ£¬°Ñ¿ª·¢¹¤¾ß°ü°²×°ÉÏ¡£µ«ÊÇÈç¹ûÊÇ×âµÄ·þÎñÆ÷£¬ÍйܷþÎñ·½ÄǰïÈËÓָ㲻¶®Äã˵µÄɶ×Ógcc£¬Òª°²×°gccʵÔÚÊÇÌ«Âé·³ÁË¡£ÄãµÃÈ¥ÕÒgccÏà¹ØµÄ°ü£¬°æ±¾ºÅ»¹µÃ±ØÐë¶ÔÓ¦ÉÏ£¬·ñÔò²»¼æÈÝ¡£×î½ü¸øÒ»¸öÅóÓÑ×°gcc£¬ ......