From 9b5cb445ee65d70d6b16bd65abb979f932441b93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Tue, 20 Oct 2015 16:55:48 +0200 Subject: [PATCH] tools.ps.linux: recover from missing file in ps-cmdline, fixes #1120 --- basis/tools/ps/linux/linux.factor | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/basis/tools/ps/linux/linux.factor b/basis/tools/ps/linux/linux.factor index 6cddf7b678..0a6d201f87 100644 --- a/basis/tools/ps/linux/linux.factor +++ b/basis/tools/ps/linux/linux.factor @@ -1,23 +1,24 @@ ! Copyright (C) 2012 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors assocs io.directories io.pathnames kernel -math.parser prettyprint sequences splitting system -tools.ps unix.linux.proc ; +USING: accessors arrays assocs continuations io.directories kernel +math.parser sequences splitting system tools.ps unix.linux.proc ; IN: tools.ps.linux ! If cmdline is empty, read the filename from /proc/pid/stat -: ps-cmdline ( path -- path string ) +: ps-cmdline ( path -- string ) dup parse-proc-pid-cmdline [ - dup parse-proc-pid-stat filename>> + parse-proc-pid-stat filename>> [ "()" member? ] trim "[" "]" surround ] [ - "\0" split " " join + nip "\0" split harvest " " join ] if-empty ; +: safe-ps-cmdline ( path -- string/f ) + [ ps-cmdline ] [ 2drop f ] recover ; + M: linux ps ( -- assoc ) "/proc" [ - "." directory-files - [ file-name string>number ] filter - [ ps-cmdline ] { } map>assoc + "." directory-files [ string>number ] filter + [ dup safe-ps-cmdline 2array ] map sift-values ] with-directory ;