#:g1: cl-procの紹介

Posted 2014-08-14 07:30:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の226日目です。

cl-procとはなにか

 cl-procは、Reinout Stevens氏によるlibprocをCommon Lispから使うライブラリです。

パッケージ情報

パッケージ名cl-proc
Quicklisp
Quickdocscl-proc | Quickdocs
common-lisp.netCL-Proc project
CL Test Grid: ビルド状況cl-proc | CL Test Grid

インストール方法

(ql:quickload :proc)

 Debianの場合、事前に

$ sudo apt-get install libprocps3-dev

等でlibprocpsの開発環境をインストールしておきます。

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 Debianの場合、libprocが無く、libprocspなので、定義に若干の追加をします。

(define-foreign-library libproc
  (:unix (:or "libproc-3.2.8.so" "libproc-3.2.7.so" "libproc.so" "libprocps.so.3"))
  (t (:default "libproc-dev")))

 用意されているのは下記のような関数と定数ですが、libprocの仕様変更によりget_proc_statsがプライベートなシンボルになってしまったため、get_proc_statsを使っている箇所はコードを修正しないと動きません。

proc:+nr-of-cpus+
;=>  8

(proc:boottime) ;=> 1407816324

(proc:get-pids) ;=> (1 2 3 5 7 8 9 10 11 12 13 15 16 17 18 20 21 22 23 25 26 27 28 30 31 32 33 35 ; 36 37 38 40 41 42 43 45 46 47 48 49 50 51 52 53 54 55 57 58 59 64 66 68 112 ; 115 117 118 119 120 121 122 123 124 125 126 133 134 135 137 138 146 147 148 ; 153 154 158 159 175 176 177 179 180 181 182 202 209 210 226 301 313 314 315 ; 320 396 400 418 463 464 466 467 471 511 517 570 571 574 579 580 600 789 798 ; 803 812 823 828 833 837 884 891 893 928 931 936 938 940 955 956 967 968 969 ; 972 973 974 975 976 977 978 979 984 1012 1032 1239 1258 1292 1311 1370 1372 ; 1373 1375 1376 1378 1379 1643 1716 1901 1951 1952 2193 2194 2211 2212 2217 ; 2283 2284 2293 2296 2297 2319 2320 2330 2338 2342 2345 2349 2353 2367 2375 ; 2376 2383 2384 2385 2386 2387 2388 2389 2394 2399 2400 2404 2420 2423 2424 ; 2425 2426 2464 2485 2508 2540 2560 2574 2653 2654 2665 2759 2760 2761 2784 ; 2880 3050 3051 3054 3055 3056 3060 3081 3089 3092 3126 3245 3263 3313 3369 ; 3389 4207 4208 4209 4210 5657 5678 5690 5695 5723 5799 5879 5934 5974 6124 ; 6129 6133 6137 6142 6145 6151 6195 6232 6514 6579 6580 6926 6934 6935 6947 ; 7031 7032 7033 7058 7232 7233 7523 7589 7604 7611 7616 8019 8023 8037 8174 ; 8363 8365 8399 8479 8671 8798 8817 8914 9005 9061 19330 19534 19549 19636 ; 19813 20318 20576 20728 20871 20994 24111 24112 24113 30520 31836)

(proc:get-pids-info 'proc::tid) ;=> ((1) (2) (3) (5) (7) (8) (9) (10) (11) (12) (13) (15) (16) (17) (18) (20) (21) ; (22) (23) (25) (26) (27) (28) (30) (31) (32) (33) (35) (36) (37) (38) (40) ; (41) (42) (43) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (57) ; (58) (59) (64) (66) (68) (112) (115) (117) (118) (119) (120) (121) (122) (123) ; (124) (125) (126) (133) (134) (135) (137) (138) (146) (147) (148) (153) (154) ; (158) (159) (175) (176) (177) (179) (180) (181) (182) (202) (209) (210) (226) ; (301) (313) (314) (315) (320) (396) (400) (418) (463) (464) (466) (467) (471) ; (511) (517) (570) (571) (574) (579) (580) (600) (789) (798) (803) (812) (823) ; (828) (833) (837) (884) (891) (893) (928) (931) (936) (938) (940) (955) (956) ; (967) (968) (969) (972) (973) (974) (975) (976) (977) (978) (979) (984) (1012) ; (1032) (1239) (1258) (1292) (1311) (1370) (1372) (1373) (1375) (1376) (1378) ; (1379) (1643) (1716) (1901) (1951) (1952) (2193) (2194) (2211) (2212) (2217) ; (2283) (2284) (2293) (2296) (2297) (2319) (2320) (2330) (2338) (2342) (2345) ; (2349) (2353) (2367) (2375) (2376) (2383) (2384) (2385) (2386) (2387) (2388) ; (2389) (2394) (2399) (2400) (2404) (2420) (2423) (2424) (2425) (2426) (2464) ; (2485) (2508) (2540) (2560) (2574) (2653) (2654) (2665) (2759) (2760) (2761) ; (2784) (2880) (3050) (3051) (3054) (3055) (3056) (3060) (3081) (3089) (3092) ; (3126) (3245) (3263) (3313) (3369) (3389) (4207) (4208) (4209) (4210) (5657) ; (5678) (5690) (5695) (5723) (5799) (5879) (5934) (5974) (6124) (6129) (6133) ; (6137) (6142) (6145) (6151) (6195) (6232) (6514) (6579) (6580) (6926) (6934) ; (6935) (6947) (7031) (7032) (7033) (7058) (7232) (7233) (7523) (7589) (7604) ; (7611) (7616) (8019) (8023) (8037) (8174) (8363) (8365) (8399) (8479) (8671) ; (8798) (8817) (8914) (9005) (9061) (9141) (19330) (19534) (19549) (19636) ; (19813) (20318) (20576) (20728) (20871) (20994) (24111) (24112) (24113) ; (30520) (31836))

(proc:kill pid 9)

(proc:signal-number-to-name 9) ;=> "KILL"

(proc:signal-name-to-number "kill") ;=> 9

(time:print-interval-or-never (proc:uptime)) ;>> 2 days 3 hours 22 minutes 30 seconds ;=> NIL

まとめ

 今回は、cl-procを紹介してみました。
当然のことではありますが、FFI系のライブラリは元のライブラリが変更になって動かないというパタンが非常に多いですね。

comments powered by Disqus