Next: , Previous: Output from Processes, Up: Processes   [Contents][Index]


36.10 ÈÖʼ¡§¥×¥í¥»¥¹¤Î¾õÂÖÊѲ½¤Î¸¡½Ð

¥×¥í¥»¥¹¤ÎÈÖʼ¡Êprocess sentinel¡Ë¤Ï¡¢ ¥×¥í¥»¥¹¤ò½ªÎ»¡¿°ì»þÄä»ß¡¿·Ñ³¤µ¤»¤ë ¡ÊEmacs¤¬Á÷¤Ã¤¿¤«¥×¥í¥»¥¹¼«¿È¤Îưºî¤Ë¤è¤Ã¤ÆÀ¸µ¯¤·¤¿¡Ë¥·¥°¥Ê¥ë¤ò´Þ¤á¤Æ ÂбþÉÕ¤±¤é¤ì¤¿¥×¥í¥»¥¹¤Î¾õÂÖ¤¬Ç¤°Õ¤ÎÍýͳ¤ÇÊѲ½¤·¤¿¤È¤­¤Ë ¸Æ¤Ó½Ð¤µ¤ì¤ë´Ø¿ô¤Ç¤¹¡£ ¥×¥í¥»¥¹¤ÎÈÖʼ¤Ï¡¢¥×¥í¥»¥¹¤¬½ªÎ»¤·¤Æ¤â¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£ ÈÖʼ¤Ï2¤Ä¤Î°ú¿ô¡¢»ö¾Ý¤¬È¯À¸¤·¤¿¥×¥í¥»¥¹¤È »ö¾Ý¤Î¼ïÎà¤òµ­½Ò¤¹¤ëʸ»úÎó¤ò¼õ¤±¼è¤ê¤Þ¤¹¡£

»ö¾Ý¤òµ­½Ò¤¹¤ëʸ»úÎó¤Ï¤Ä¤®¤Î¤È¤ª¤ê¤Ç¤¹¡£

ÈÖʼ¤ÏEmacs¤¬¡Ê¤¿¤È¤¨¤Ð¡¢Ã¼ËöÆþÎϤä»þ´Ö·Ð²á¡¢¥×¥í¥»¥¹¤Î½ÐÎϤò¡Ë ÂԤäƤ¤¤ë¤È¤­¤Ë¤Î¤ß¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ ¾¤ÎLisp¥×¥í¥°¥é¥à¤Î¼Â¹ÔÅÓÃæ¤Ç̵Ãá½ø¤ËÈÖʼ¤ò¼Â¹Ô¤·¤¿¾ì¹ç¤Ëµ¯¤³¤ë ¥¿¥¤¥ß¥ó¥°¥¨¥é¡¼¤ò²óÈò¤¹¤ë¤¿¤á¤Ç¤¹¡£ sit-for¤äsleep-for¡Êsee Waiting¡Ë¡¢¤¢¤ë¤¤¤Ï¡¢ accept-process-output¡Êsee Accepting Output¡Ë¤ò ¸Æ¤Ó½Ð¤¹¤È¥×¥í¥°¥é¥à¤ÏÂÔ¤Á¤ËÆþ¤ê¡¢ÈÖʼ¤¬Æ°¤±¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ Emacs¤Ï¡¢¥³¥Þ¥ó¥É¥ë¡¼¥×¤ÇÆþÎϤòÆÉ¤à¤È¤­¤Ë¤âÈÖʼ¤Î¼Â¹Ô¤òµö¤·¤Þ¤¹¡£

ÈÖʼ¤ÎÆâ¦¤Ç¤ÏÃæÃǤÏÉáÄ̤϶ػߤµ¤ì¤Æ¤¤¤Þ¤¹¡£ ¤µ¤â¤Ê¤¤¤È¡¢¥³¥Þ¥ó¥É¥ì¥Ù¥ë¤ÇÂǤä¿C-g¤Î¸ú²Ì¤ä¡¢ ¥æ¡¼¥¶¡¼¥³¥Þ¥ó¥É¤òÃæÃǤ¹¤ë¤¿¤á¤ËÂǤä¿C-g¤Î¸ú²Ì¤Ïͽ¬¤Ç¤­¤Þ¤»¤ó¡£ ÈÖʼ¤ÎÆâ¦¤ÇÃæÃǤò¹Ô¤¤¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢ inhibit-quit¤Ënil¤ò«Çû¤·¤Þ¤¹¡£ See Quitting¡£

¥×¥í¥»¥¹¤Î¥Ð¥Ã¥Õ¥¡¤Ë½ÐÎϤò½ñ¤­¹þ¤àÈÖʼ¤Ï¡¢ ¤½¤Î¥Ð¥Ã¥Õ¥¡¤¬Í­¸ú¤Ç¤¢¤ë¤«¤É¤¦¤«¤ò¸¡ºº¤¹¤ë¤Ù¤­¤Ç¤¹¡£ ̵¸ú¤Ê¥Ð¥Ã¥Õ¥¡¤ËÁÞÆþ¤·¤è¤¦¤È¤¹¤ë¤È¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£ ¥Ð¥Ã¥Õ¥¡¤¬Ìµ¸ú¤Ç¤¢¤ì¤Ð¡¢ ¼°(buffer-name (process-buffer process)) ¤ò¼Â¹Ô¤¹¤ë¤Ènil¤òÊÖ¤·¤Þ¤¹¡£

ÈÖʼ¤Î¼Â¹ÔÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤¹¤ë¤È¤½¤Î¥¨¥é¡¼¤Ï¼«Æ°Åª¤ËÊ᪤µ¤ì¡¢ ÈÖʼ¤ò»Ïư¤·¤¿¤È¤­¤Ëư¤¤¤Æ¤¤¤¿ ¥×¥í¥°¥é¥à¤Î¼Â¹Ô¤òÄä»ß¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡£ ¤·¤«¤·¡¢debug-on-error¤¬nil°Ê³°¤Ç¤¢¤ë¤È¡¢ ¥¨¥é¡¼¤òÊ᪤·¤Þ¤»¤ó¡£ ¤³¤ì¤Ë¤è¤ê¡¢Lisp¥Ç¥Ð¥Ã¥¬¤ÇÈÖʼ¤ò¥Ç¥Ð¥Ã¥°¤Ç¤­¤Þ¤¹¡£ See Debugger¡£

Emacs¤Î½é´ü¤ÎÈǤǤϡ¢Àµµ¬É½¸½¤òõº÷¤·¤¿¤ê°ìÃ×½èÍý¤¹¤ëÈÖʼ¤Ç¤Ï¡¢ ¥Þ¥Ã¥Á¥Ç¡¼¥¿¤òÌÀ¼¨Åª¤ËÊݸ¡¿Éü¸µ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤·¤¿¡£ º£¤ÎEmacs¤Ï¡¢ÈÖʼ¤ËÂФ·¤Æ¤Ï¤³¤ì¤ò¼«Æ°Åª¤Ë¹Ô¤¤¤Þ¤¹¤«¤é¡¢ ÈÖʼ¤ÇÌÀ¼¨Åª¤Ë¹Ô¤¦É¬ÍפϤ¢¤ê¤Þ¤»¤ó¡£ See Match Data¡£

Function: set-process-sentinel process sentinel

¤³¤Î´Ø¿ô¤Ï¡¢¥×¥í¥»¥¹process¤ËÈÖʼsentinel¤òÂбþÉÕ¤±¤ë¡£ sentinel¤¬nil¤Ç¤¢¤ë¤È¡¢¥×¥í¥»¥¹¤ËÈÖʼ¤Ï¤Ê¤¤¡£ ÈÖʼ¤¬¤Ê¤¤¾ì¹ç¤Î¥Ç¥Õ¥©¥ë¥È¤Î¤Õ¤ë¤Þ¤¤¤Ï¡¢ ¥×¥í¥»¥¹¾õÂÖ¤¬ÊѲ½¤¹¤ë¤È¥×¥í¥»¥¹¤Î¥Ð¥Ã¥Õ¥¡¤Ë¥á¥Ã¥»¡¼¥¸¤òÁÞÆþ¤¹¤ë¡£

(defun msg-me (process event)
   (princ
     (format "Process: %s had the event `%s'" process event)))
(set-process-sentinel (get-process "shell") 'msg-me)
     ⇒ msg-me
(kill-process (get-process "shell"))
     -| Process: #<process shell> had the event `killed'
     ⇒ #<process shell>
Function: process-sentinel process

¤³¤Î´Ø¿ô¤Ï¡¢¥×¥í¥»¥¹process¤ÎÈÖʼ¤òÊÖ¤¹¤«¡¢ ÈÖʼ¤¬¤Ê¤±¤ì¤Ðnil¤òÊÖ¤¹¡£

Function: waiting-for-user-input-p

ÈÖʼ¤ä¥Õ¥£¥ë¥¿´Ø¿ô¤¬Æ°ºîÃæ¤Ë¤³¤Î´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹¤È¡¢ ÈÖʼ¤ä¥Õ¥£¥ë¥¿´Ø¿ô¤ò¸Æ¤Ó½Ð¤·¤¿¤È¤­¤ËEmacs¤¬¥æ¡¼¥¶¡¼¤«¤é¤Î ¥­¡¼¥Ü¡¼¥ÉÆþÎϤòÂԤäƤë¤Ènil°Ê³°¤òÊÖ¤·¡¢ ¤½¤ì°Ê³°¤Ç¤Ïnil¤òÊÖ¤¹¡£