[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) &
Ïà¹ØÎĵµ£º
ÕâÆªÈÕÖ¾»¹ÊÇÏÈ´ÓÒ»¸öÄܹ»ÔËÐÐÆðÀ´µÄÀý×Ó³ö·¢£¬Ò»µ©ÄÜ˳ÀûµÄ¿´µ½³ÌÐòµÄ³É¹¦ÔËÐУ¬ÄÇô½ÓÏÂÀ´µÄʼþÎÒÏëÓ¦¸ÃÊÇÎÊΪʲôÁË£¿ËƺõÕâÑù¸ü¼ÓÈÝÒ×Àí½âºÍÕÆÎÕ¡£
¶ÔÓÚsocket³ÌÐòµÄ¸ÅÄîÕâÀï¾Í²»¶àдÁË£¬µ«ÎÒÏàÐÅ£¬Èç¹ûÄÜ¿´ÍêÕâÕûƪÎÄÕ£¬ÎÒÏàÐŲ»»áÔÙÓÐÕâÑùµÄÒÉÎʵġ£
ÏÂÃæ½«±àдһ¸öc/s½á¹¹µÄ³ÌÐò£¬Ö÷Òª¹¦ÄÜÊÇclient½«Ïòserver·¢Ë ......
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
½üÈÕ£¬ÔÚLinuxCON 2009´ó»áÉÏ£¬×ÀÃæ
Linux
ÓÖ³ÉΪҵ½ç¹Ø×¢µÄ½¹µãÖ®Ò»¡£¸÷ÖÖ²»Í¬µÄÉùÒô£¬É¤ÃŶ¼ºÜ´ó¡£ÔÚÕâ·×·×ÈÂȵķÕΧÖУ¬
Linux
ÈçºÎ×ß³ö×ÀÃæÀ§¾³£¿
& ......
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 ......
linuxÐźŻúÖÆÔ¶Ô¶±ÈÏëÏóµÄ¸´ÔÓ£¬±¾ÎÄÁ¦ÕùÓÃ×î¶ÌµÄƪ·ù£¬¶Ô¸Ã»úÖÆ×öÁËÉîÈëϸÖµķÖÎö¡£¶ÁÕß¿ÉÒÔÏȶÁÒ»ÏÂÐźÅÓ¦ÓÃʵÀý£¨ÔÚÐźţ¨Ï£©ÖУ©£¬ÕâÑù¿ÉÒÔ¶ÔÐźŷ¢ËÍÖ±µ½ÏàÓ¦µÄ´¦Àíº¯ÊýÖ´ÐÐÍê±ÏÕâÒ»¹ý³ÌÓиö´óÖµÄÓ¡Ïó¡£±¾Îľ¡Á¿¸ø³öÁ˽Ïк¯ÊýµÄÓ¦ÓÃʵÀý£¬×ÅÖØËµÃ÷ÕâЩµÄ¹¦ÄÜ¡£
Ò»¡¢Ðźż°ÐźÅÀ´Ô´
Ðźű¾ÖÊ
Ð ......
ÍøÉÏÕÒµ½ÁËÐí¶à¹ØÓÚÕâ·½ÃæµÄÎÄÕ£¬ÄÚÈÝ»ù±¾Ïàͬ¡£¾¹ýʵ¼ù£¬·¢ÏÖÄÚÈÝÀïÆÕ±é´æÔÚÎÊÌâ¡£ÒÔÏÂÊÇ×Ô¼ºÊµ¼ùÖ®ºó£¬ÐÞ¸ÄÁËÆäÖеĴíÎ󣬲¢¼Ç¼ÏÂÀ´µÄ±Ê¼Ç¡£
ÔÚ Linux »ò UNIX Ï嵀 Apache ·þÎñÆ÷ÖиøÍøÒ³ÉèÖÃÃÜÂë—ÕâÊÇÒ»Öֺܼòµ¥µÄ»ùÓÚÓû§Ãû/¿ÚÁîµÄÈÏÖ¤·½Ê½£ ......