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-07-23

KMRCLを眺める(178) GETPID

| 23:48 | KMRCLを眺める(178) GETPID - わだばLisperになる を含むブックマーク はてなブックマーク - KMRCLを眺める(178) GETPID - わだばLisperになる

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行です。