[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) &
Ïà¹ØÎĵµ£º
½ñÌì×°ºÃÁËmonodevelop£¬±¾À´ÊÇÏëÓÃÀ´C#µÄ£¬¼ûËûÒ²Ö§³ÖC/C++¿ª·¢£¬ÓÚÊÇÊÔÁËһϣ¬¸Ð¾õºÜ²»´í£¬ÖÕÓÚÕÒµ½ÁËlinuxÏÂÒ»¸ö±È½ÏÂúÒâµÄC++¿ª·¢»·¾³¡£
ÒÔǰдC++¶¼ÊÇÔÚEclipseÏÂдµÄ£¬µ«EclipseÆô¶¯Âý£¬ÅäÖÃÂé·³£¬ºÍjavaÒ»ÆðÓõÄʱºòºÜÈÝÒ׳ö´í£¬Óõĺܲ»Ë¬£¬µ±È»¸ ......
gcc£¬gdbµÄʹÓÃ
×÷Õߣºzccst
ÉÏÖÜÎåÔÚͼÊé¹Ý½èÁËÒ»±¾¡¶LinuxÈí¼þ¹¤³Ìʦ£¨CÓïÑÔ£©ÊµÓý̡̳·£¬ÈÃÎÒÊÕ»ñÁ¼¶à¡£²»½ö½öÊÇÊéÖеÄ֪ʶ£¬»¹ÓжÔ֪ʶÌåϵºÍ¼Ü¹¹ÈÏʶµÄÉîÈë¡£
LinuxÏÂC¿ª·¢£º
1£¬gcc,gdbµÄʹÓá£
2£¬MakefileÎļþµÄ±àд¡£
3£¬ÏµÍ³º¯ÊýµÄʹÓÃ
4£¬Îļþ²Ù×÷
5£¬´®ÐÐͨÐÅ
6£¬½ø³Ì¿ØÖÆ
7£¬½ø³Ì¼ ......
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
½üÈÕ£¬ÔÚLinuxCON 2009´ó»áÉÏ£¬×ÀÃæ
Linux
ÓÖ³ÉΪҵ½ç¹Ø×¢µÄ½¹µãÖ®Ò»¡£¸÷ÖÖ²»Í¬µÄÉùÒô£¬É¤ÃŶ¼ºÜ´ó¡£ÔÚÕâ·×·×ÈÂȵķÕΧÖУ¬
Linux
ÈçºÎ×ß³ö×ÀÃæÀ§¾³£¿
& ......
·ÃÎÊÎļþ
/etc/host.conf
¸æËßÍøÂçÓòÃû·þÎñÆ÷ÈçºÎ²éÕÒÖ÷»úÃû¡££¨Í¨³£ÊÇ /etc/hosts£¬È»ºó¾ÍÊÇÃû³Æ·þÎñÆ÷£»¿Éͨ¹ý netconf ¶ÔÆä½øÐиü¸Ä£©
/etc/hosts
°üº¬£¨±¾µØÍøÂçÖУ©ÒÑÖªÖ÷»úµÄÒ»¸öÁÐ±í¡£Èç¹ûϵͳµÄ IP ²»ÊǶ¯Ì¬Éú³É£¬¾Í¿ÉÒÔʹÓÃËü¡£¶ÔÓÚ¼òµ¥µÄÖ÷»úÃû½âÎö£¨µã·Ö±íʾ·¨£©£¬ÔÚÇëÇó DNS »ò NIS ÍøÂçÃû³Æ·þÎñÆ÷֮ǰ£¬ ......
ls -l|grep ^d ----Áгöµ±Ç°Ä¿Â¼ÏµÄÎļþ¼Ð
ls -l|grep ^d|grep "tmp" ----Áгöµ±Ç°Ä¿Â¼ÏÂÃ÷×Óº¬ÓÐ"tmp"µÄÎļþ¼Ð
for dir in `ls -l ~/dxy/|grep ^d | awk '{print $9}'` ---- awk '{print $9}' ,Ö»print Îļþ¼ÐµÄÃû×Ö
do
echo "==== $dir"
cd ~/dxy;cd ......