|
Last change
on this file was
15569,
checked in by Mark Evenson, 4 years ago
|
|
Untabify en masse
Results of running style.org source blocks on tree
|
|
File size:
1.6 KB
|
| Line | |
|---|
| 1 | (in-package :extensions) |
|---|
| 2 | |
|---|
| 3 | (export '(get-pid) |
|---|
| 4 | :extensions) |
|---|
| 5 | |
|---|
| 6 | (defun get-pid () |
|---|
| 7 | "Get the process identifier of this lisp process. |
|---|
| 8 | |
|---|
| 9 | Used to be in SLIME but generally useful, so now back in ABCL proper." |
|---|
| 10 | (handler-case |
|---|
| 11 | (let* ((runtime |
|---|
| 12 | (java::jstatic "getRuntime" "java.lang.Runtime")) |
|---|
| 13 | (command |
|---|
| 14 | (java::jnew-array-from-array |
|---|
| 15 | "java.lang.String" #("sh" "-c" "echo $PPID"))) |
|---|
| 16 | (runtime-exec-jmethod |
|---|
| 17 | ;; Complicated because java.lang.Runtime.exec() is |
|---|
| 18 | ;; overloaded on a non-primitive type (array of |
|---|
| 19 | ;; java.lang.String), so we have to use the actual |
|---|
| 20 | ;; parameter instance to get java.lang.Class |
|---|
| 21 | (java::jmethod "java.lang.Runtime" "exec" |
|---|
| 22 | (java::jcall |
|---|
| 23 | (java::jmethod "java.lang.Object" "getClass") |
|---|
| 24 | command))) |
|---|
| 25 | (process |
|---|
| 26 | (java::jcall runtime-exec-jmethod runtime command)) |
|---|
| 27 | (output |
|---|
| 28 | (java::jcall (java::jmethod "java.lang.Process" "getInputStream") |
|---|
| 29 | process))) |
|---|
| 30 | (java::jcall (java::jmethod "java.lang.Process" "waitFor") |
|---|
| 31 | process) |
|---|
| 32 | (loop :with b :do |
|---|
| 33 | (setq b |
|---|
| 34 | (java::jcall (java::jmethod "java.io.InputStream" "read") |
|---|
| 35 | output)) |
|---|
| 36 | :until (member b '(-1 #x0a)) ; Either EOF or LF |
|---|
| 37 | :collecting (code-char b) :into result |
|---|
| 38 | :finally (return |
|---|
| 39 | (parse-integer (coerce result 'string))))) |
|---|
| 40 | (t () 0))) |
|---|
| 41 | |
|---|
| 42 | |
|---|
| 43 | |
|---|
Note: See
TracBrowser
for help on using the repository browser.