Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-10-13

KMRCLを眺める(213) DESTROY-PROCESS

| 23:03 | KMRCLを眺める(213) DESTROY-PROCESS - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(213) DESTROY-PROCESS - わだばLisperになる

今回はKMRCLprocesses.lispから、DESTROY-PROCESSです。

定義は、

(defun destroy-process (process)
  #+cmu (mp:destroy-process process)
  #+allegro (mp:process-kill process)
  #+sb-thread (sb-thread:destroy-thread process)
  #+lispworks (mp:process-kill process)
  #+openmcl (ccl:process-kill process)
  )

となっていてスレッドを殺す関数のラッパーです。やはり命名はCMUCLに合せているようです。

眺めてみるにPROCESS-KILLという名前も定番のようですね。

動作は、SBCLべったりですが、

(kl::make-process "sleep 999"
                  (lambda () (sleep 999)))
;⇒ #<SB-THREAD:THREAD "sleep 999" RUNNING {1011CDDC61}>

(sb-thread:list-all-threads)
;⇒ (#<SB-THREAD:THREAD "worker" RUNNING {1011DEC001}>
;    #<SB-THREAD:THREAD "sleep 999" RUNNING {1011CDDC61}>
;    #<SB-THREAD:THREAD "repl-thread" RUNNING {1011A9DE91}>
;    #<SB-THREAD:THREAD "auto-flush-thread" RUNNING {1011A9DC21}>
;    #<SB-THREAD:THREAD "reader-thread" RUNNING {1011425161}>
;    #<SB-THREAD:THREAD "control-thread" RUNNING {1011423EE1}>
;    #<SB-THREAD:THREAD "Swank 4005" RUNNING {101132EDF1}>
;    #<SB-THREAD:THREAD "initial thread" RUNNING {10110E3BB1}>)

(find "sleep 999"
      (sb-thread:list-all-threads)
      :test #'string=
      :key #'sb-thread:thread-name)
;⇒ #<SB-THREAD:THREAD "sleep 999" RUNNING {1011C24351}>

;; スレッドを名前で見付けてDESTROY-PROCESS
(kl::destroy-process  
 (find "sleep 999"
       (sb-thread:list-all-threads)
       :test #'string=
       :key #'sb-thread:thread-name))
;⇒ NIL

(sb-thread:list-all-threads)
;⇒ (#<SB-THREAD:THREAD "worker" RUNNING {1011EEE271}>
;    #<SB-THREAD:THREAD "repl-thread" RUNNING {1011A9DE91}>
;    #<SB-THREAD:THREAD "auto-flush-thread" RUNNING {1011A9DC21}>
;    #<SB-THREAD:THREAD "reader-thread" RUNNING {1011425161}>
;    #<SB-THREAD:THREAD "control-thread" RUNNING {1011423EE1}>
;    #<SB-THREAD:THREAD "Swank 4005" RUNNING {101132EDF1}>
;    #<SB-THREAD:THREAD "initial thread" RUNNING {10110E3BB1}>)

というところ。