¶øÔÚÖÚ¶àIPC»úÖÆÖУ¬Ðźţ¨Signal£©»úÖÆÒÔÆäÇáÁ¿¼¶¡¢¸ßЧºÍÁé»îµÄÌØµã£¬³ÉΪ½ø³Ì¼äÒ첽֪ͨºÍʼþ´¦ÀíµÄÊ×Ñ¡¹¤¾ß
ÉîÈëÀí½âºÍÊìÁ·ÕÆÎÕLinuxÐźŴ¦Àí£¬¶ÔÓÚ¿ª·¢ÕßÀ´Ëµ£¬ÊÇͨÍù¸ßЧ¡¢¿É¿¿ÏµÍ³Éè¼ÆµÄ±Ø¾Ö®Â·
±¾ÎĽ«È«ÃæÆÊÎöLinuxÐźŴ¦ÀíµÄÔÀí¡¢»úÖÆ¡¢Êµ¼ùÒÔ¼°ÓÅ»¯²ßÂÔ£¬°ïÖú¶ÁÕßÕÆÎÕÕâ°Ñ½ø³Ì¼äͨÐŵÄÔ¿³×
Ò»¡¢LinuxÐźŻù´¡£º¸ÅÄîÓë»úÖÆ Ðźţ¬ÔÚLinuxÖÐÊÇÒ»ÖÖÈí¼þÖжϣ¬ÓÃÓÚÏò½ø³Ì´«µÝÒ첽ʼþ֪ͨ
µ±Ä³¸öʼþ·¢Éúʱ£¨ÈçÓû§°´ÏÂCtrl+CÇëÇóÖÕÖ¹½ø³Ì¡¢Ó²¼þÒì³£´¥·¢µÈ£©£¬²Ù×÷ϵͳ»áÏòÄ¿±ê½ø³Ì·¢ËÍÒ»¸öÐźÅ
ÐźÅÒ»µ©·¢Ë͸ø½ø³Ì£¬¾Í»á¸ù¾Ý½ø³ÌµÄµ±Ç°×´Ì¬ºÍÐźŵĴ¦Àí·½Ê½£¬²úÉúÏàÓ¦µÄÐÐΪ£¬±ÈÈçÖÕÖ¹½ø³Ì¡¢ºöÂÔÐźŻòÖ´ÐÐÌØ¶¨µÄÐźŴ¦Àíº¯Êý
LinuxÐźŻúÖÆµÄºËÐÄÔÚÓÚÐźŵķ¢ËÍÓë½ÓÊÕ´¦Àí
Ðźŵķ¢ËÍ¿ÉÒÔͨ¹ý¶àÖÖ;¾¶ÊµÏÖ£¬°üÀ¨µ«²»ÏÞÓÚ£º - Óû§²ãÃæ£ºÈçͨ¹ýkillÃüÁî»òkill()ϵͳµ÷ÓÃÏò½ø³Ì·¢ËÍÐźÅ
- Èí¼þÒì³££ºÈç·Ç·¨ÄÚ´æ·ÃÎʵ¼ÖµĶδíÎó£¨SIGSEGV£©£¬³ýÁã´íÎóµ¼Öµĸ¡µãÒì³££¨SIGFPE£©µÈ
Ó²¼þʼþ£ºÈ綨ʱÆ÷µ½ÆÚ¡¢I/OÖжϵÈ
- ½ø³Ì×ÔÉí£º½ø³Ì¿ÉÒÔͨ¹ýraise()»ò`kill(getpid(),sig)`Ïò×Ô¼º·¢ËÍÐźÅ
ÐźŵĽÓÊÕ´¦ÀíÔòÒÀÀµÓÚ½ø³Ì¶ÔÐźŵÄÏìÓ¦²ßÂÔ£¬Ö÷Òª·ÖΪÈýÀࣺ 1.ĬÈÏ´¦Àí£º´ó¶àÊýÐźŶ¼ÓÐĬÈϵĴ¦Àí¶¯×÷£¬ÈçSIGKILLĬÈÏÖÕÖ¹½ø³Ì£¬SIGIGNĬÈϺöÂÔ
2.ºöÂÔÐźţº½ø³Ì¿ÉÒÔͨ¹ýsignal()»òsigaction()º¯ÊýÏÔʽºöÂÔijЩÐźţ¬µ«²¢·ÇËùÓÐÐźŶ¼¿ÉÒÔ±»ºöÂÔ£¨ÈçSIGKILLºÍSIGSTOP£©
3.²¶»ñÐźţº½ø³Ì¿ÉÒÔ×¢²áÒ»¸öÐźŴ¦Àíº¯Êý£¬µ±½ÓÊÕµ½Ìض¨ÐźÅʱ£¬Ö´Ðиú¯Êý
ÕâÊÇʵÏÖ×Ô¶¨ÒåÐźŴ¦ÀíÂß¼µÄ¹Ø¼ü
¶þ¡¢ÐźŴ¦Àíº¯Êý£º×¢²áÓë±àд ÒªÔÚLinuxÖд¦ÀíÐźţ¬Ê×ÏÈÐèҪע²áÐźŴ¦Àíº¯Êý
Õâͨ³£Í¨¹ý`signal()`»ò¸üÍÆ¼öµÄ`sigaction()`º¯ÊýÍê³É
`signal()`º¯ÊýËäÈ»¼òµ¥Ò×Ó㬵«´æÔÚһЩÎÊÌ⣬Èç²»¿ÉÖØÈëÐÔºÍÐźŴ¦ÀíµÄ²»¿É¿¿ÐÔ£¬Òò´ËÔÚÏÖ´ú±à³ÌÖУ¬`sigaction()`ÊǸü³£ÓõÄÑ¡Ôñ
`sigaction()`º¯ÊýÔÊÐí¸ü¾«Ï¸µØ¿ØÖÆÐźŵÄÐÐΪ£¬°üÀ¨Ö¸¶¨ÐźŴ¦Àíº¯Êý¡¢ÉèÖÃÐÅºÅÆÁ±Î×ÖÒÔ¼°²éѯµ±Ç°ÐźŴ¦Àí״̬
ÆäÔÐÍÈçÏ£º int sigaction(int signum, const structsigaction act, struct sigactionoldact); - `signum`£ºÖ¸¶¨Òª²Ù×÷µÄÐźűàºÅ
- `act`£ºÖ¸ÏòÒ»¸ö`sigaction`½á¹¹Ì壬°üº¬ÐµÄÐźŴ¦ÀíÐÅÏ¢
- `oldact`£ºÈç¹û²»ÎªNULL£¬ÓÃÓÚ±£´æÖ®Ç°µÄÐźŴ¦ÀíÐÅÏ¢
`sigaction`½á¹¹Ìå°üº¬¶à¸ö×ֶΣ¬ÆäÖÐ×îÖØÒªµÄÊÇ`sa_handler`»ò`sa_sigaction`£¬ÓÃÓÚÖ¸¶¨ÐźŴ¦Àíº¯Êý
±àдÐźŴ¦Àíº¯Êýʱ£¬ÐèҪעÒâÒÔϼ¸µã£º - ÐźŴ¦Àíº¯ÊýӦΪvoidÀàÐÍ£¬½ÓÊÜÒ»¸öint²ÎÊý£¨ÐźűàºÅ£©
- ÐźŴ¦Àíº¯ÊýÓ¦¾¡Á¿¼ò¶Ì£¬±ÜÃâµ÷Óò»¿ÉÖØÈëµÄº¯Êý£¨Èç`printf`£©£¬ÒòΪÐźŴ¦ÀíÆÚ¼ä¿ÉÄÜÖÐ¶ÏÆäËûÖØÒª´úÂëµÄÖ´ÐÐ
- ʹÓÃvolatile sig_atomic_tÀàÐ͵ÄÈ«¾Ö±äÁ¿ÔÚÐźŴ¦Àíº¯ÊýºÍÖ÷³ÌÐò¼ä´«µÝÐÅÏ¢£¬ÒÔÈ·±£Êý¾ÝÒ»ÖÂÐÔ
Èý¡¢ÐźŴ¦ÀíµÄʵս¼¼ÇÉ ÔÚʵ¼ÊÓ¦ÓÃÖУ¬ÐźŴ¦Àí»úÖÆµÄÁé»îÐÔºÍÇ¿´ó¹¦ÄÜÌåÏÖÔÚ¶à¸ö·½Ã棺 1.ÓÅÑŵØÖÕÖ¹½ø³Ì£ºÍ¨¹ý²¶×½SIGTERMÐźţ¬½ø³Ì¿ÉÒÔÖ´ÐÐÇåÀí²Ù×÷£¨ÈçÊÍ·Å×ÊÔ´¡¢±£´æ×´Ì¬£©ºóÔÙÍ˳ö£¬ÊµÏÖÓÅÑÅÖÕÖ¹
2.´¦ÀíÓ²¼þÒì³££º¶ÔÓÚSIGSEGVµÈÓ²¼þÒì³£Ðźţ¬Í¨¹ý²¶×½²¢´¦ÀíÕâЩÐźţ¬¿ÉÒÔ¶¨Î»²¢ÐÞ¸´Ç±ÔÚµÄÄÚ´æ·ÃÎÊ´íÎó£¬Ìá¸ß³ÌÐòµÄ½¡×³ÐÔ
3.ʵÏÖ¶¨Ê±Æ÷¹¦ÄÜ£ºÀûÓÃSIGALRMÐźźÍalarm()»ò`setitimer()`º¯Êý£¬¿ÉÒÔʵÏÖ¼òµ¥µÄ¶¨Ê±ÈÎÎñ
4.½ø³Ì¼äͬ²½ÓëͨÐÅ£ºËäÈ»ÐźŲ»ÊÇÉè¼ÆÓÃÓÚÊý¾Ý½»»»£¬µ«Í¨¹ýÐźŽáºÏ¹ÜµÀ¡¢ÏûÏ¢¶ÓÁеÈIPC»úÖÆ£¬¿ÉÒÔʵÏÖ¸´ÔӵĽø³Ì¼äͬ²½ºÍͨÐÅÐèÇó
5.ÐźŴ¦ÀíÓëỊ̈߳ºÔÚ¶àÏ̳߳ÌÐòÖУ¬ÐźŴ¦Àí±äµÃ¸üΪ¸´ÔÓ£¬ÒòΪÐźÅĬÈÏ·¢Ë͸ø½ø³Ì£¬¶ø²»ÊÇÌØ¶¨Ïß³Ì
ʹÓÃ`pthread_sigmask`µÈÏß³ÌÌØ¶¨µÄÐźſØÖƺ¯Êý£¬¿ÉÒÔʵÏÖÏ̼߳¶±ðµÄÐźŴ¦Àí
ËÄ¡¢ÐźŴ¦ÀíµÄÓÅ»¯ÓëÌôÕ½ ¾¡¹ÜÐźŴ¦Àí»úÖÆÇ¿´ó£¬µ«ÔÚʵ¼ÊÓ¦ÓÃÖÐÒ²ÃæÁÙ×ÅÖî¶àÌôÕ½ºÍÓÅ»¯ÐèÇó£º - ÐźžºÌ¬Ìõ¼þ£ºÓÉÓÚÐźŴ¦Àíº¯ÊýµÄÖ´ÐÐʱ»ú²»È·¶¨£¬¿ÉÄܵ¼Ö¾ºÌ¬Ìõ¼þ
ʹÓÃÐÅºÅÆÁ±ÎºÍÐźż¯À´¾«È·¿ØÖÆÐźŵĽÓÊÕʱ»ú£¬ÊDZÜÃ⾺̬Ìõ¼þµÄÓÐЧÊÖ¶Î
- ÐźŴ¦Àíº¯ÊýµÄ°²È«ÐÔ£ºÐźŴ¦Àíº¯ÊýÓ¦¾¡Á¿¼ò¶ÌÇÒ±ÜÃâʹÓø´ÔÓµÄÊý¾Ý½á¹¹£¬ÒÔ¼õÉÙDZÔڵĴíÎóºÍËÀËø·çÏÕ
- ʵʱÐÔÒªÇ󣺶ÔÓÚ¶ÔʵʱÐÔÒªÇó¸ßµÄÓ¦Óã¬ÐèÒª×Ðϸ¿¼ÂÇÐźŴ¦ÀíÑÓ³ÙµÄÓ°Ï죬¿ÉÄÜÐèÒª½áºÏÆäËûʵʱÐÔ¸üÇ¿µÄIPC»úÖÆ£¨Èç¹²ÏíÄÚ´æ¡¢ÐźÅÁ¿£©
- ¿çƽ̨¼æÈÝÐÔ£º²»Í¬²Ù×÷ϵͳ¶ÔÐźŵÄÖ§³ÖºÍ´¦Àí»úÖÆ´æÔÚ²îÒ죬±àд¿çƽ̨´úÂëʱÐèÌØ±ð×¢ÒâÐźŵļæÈÝÐÔÎÊÌâ
½áÓï LinuxÐźŴ¦Àí»úÖÆ×÷Ϊ½ø³Ì¼äͨÐŵĻùʯ£¬ÆäÁé»îÐԺ͸ßЧÐÔÔÚ¸÷ÀàϵͳÉè¼ÆºÍÓ¦ÓóÌÐò¿ª·¢Öз¢»Ó×Ų»¿ÉÌæ´úµÄ×÷ÓÃ
ͨ¹ýÉîÈëÀí½âÐźŴ¦ÀíµÄ»ù±¾ÔÀí¡¢ÕÆÎÕÐźŴ¦Àíº¯ÊýµÄ±àд¼¼ÇÉ¡¢½áºÏʵ¼Ê°¸ÀýÖеÄʵս¼¼ÇÉ£¬ÒÔ¼°Ãæ¶ÔÌôսʱµÄÓÅ»¯²ßÂÔ£¬¿ª·¢Õß¿ÉÒÔ¸ü¼Ó×ÔÐŵØÀûÓÃÐźŻúÖÆ£¬¹¹½¨³ö¸ü¼Ó½¡×³¡¢¸ßЧµÄϵͳ¼Ü¹¹
ÔÚδÀ´µÄÈí¼þ¿ª·¢ÖУ¬Ëæ×ŶÔÐźŻúÖÆµÄ³ÖÐøÌ½Ë÷ºÍ´´Ð£¬ÎÒÃÇÓÐÀíÓÉÏàÐÅ£¬LinuxÐźŴ¦Àí½«¼ÌÐø·¢»ÓÆä¶ÀÌØ¼ÛÖµ£¬ÒýÁì½ø³Ì¼äͨÐŵÄÐÂÆªÕÂ