KMRCLを眺める(178) GETPID — #:g1

Posted 2010-07-23 14:48:00 GMT

KMRCLを眺める、symbols.lispは前回で終了したので、今回は、KMRCLのos.lispからGETPIDです。
OS周りはANSI CLの仕様では決められていないので、処理系の伝統だったり処理系が稼動するホストOSの流儀を取り込んだり色々のようです。
GETPIDは、LISP処理系のプロセスIDを取得するというもので、大概の処理系には含まれているもののようです。
動作は、Linux上のSBCLだと

(KL:GETPID)
;⇒ 3018
という感じです。
シェルで確かめてみると
setq% ps | grep 3018
g000001    3018  2570  0 20:18 pts/4    00:00:36 /var/lisp/swank-sbcl
という風に一致していることが分かります。
定義は、
(defun getpid ()
  "Return the PID of the lisp process."
  #+allegro (excl::getpid)
  #+(and lispworks win32) (win32:get-current-process-id)
  #+(and lispworks (not win32)) (system::getpid)
  #+sbcl (sb-posix:getpid)
  #+cmu (unix:unix-getpid)
  #+openmcl (ccl::getpid)
  #+(and clisp unix) (system::process-id)
  #+(and clisp win32) (cond ((find-package :win32)
                             (funcall (find-symbol "GetCurrentProcessId"
                                                   :win32)))
                            (t
                             (system::getenv "PID")))
  )
というところで、処理系依存の切り分けが殆どで、正味は1行です。

comments powered by Disqus