packages feed

proc 0.0.2 → 0.0.3

raw patch · 2 files changed

+25/−12 lines, 2 files

Files

System/Linux/Proc.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE TypeOperators, ScopedTypeVariables #-} -- This library is for parse information from /proc on Linux. module System.Linux.Proc ( -- * Types@@ -13,16 +13,21 @@     ) where  import Control.Applicative+import Control.Exception import Control.Monad import Data.Char-import Data.Word import Data.Int import Data.Maybe+import Data.Word import System.Directory import System.FilePath-import Text.XFormat.Read import System.Posix.Types+import System.IO.Error+import System.IO+import Text.XFormat.Read +import qualified Control.Exception as Exc+ type ProcessName = String type ProcessInfo = [String] data ProcessState = Running@@ -69,19 +74,27 @@     >>= \dirs -> return $ filter isIntegerString dirs  -- | Get process status with given process id.-procGetProcessStatus :: ProcessID -> IO ProcStatus-procGetProcessStatus pid = liftM procParseStatus $ procGetProcessInfo pid+procGetProcessStatus :: ProcessID -> IO (Maybe ProcStatus)+procGetProcessStatus pid = do+  info <- procGetProcessInfo pid+  return $ case info of +             Just i  -> Just $ procParseStatus i+             Nothing -> Nothing  -- | Get information for all running processes. procGetAllProcessStatus :: IO [ProcStatus]-procGetAllProcessStatus = -    procGetProcessDirs-    >>= mapM (\pid -> procGetProcessStatus (read pid :: ProcessID))+procGetAllProcessStatus = do+    dirs <- procGetProcessDirs+    status <- mapM (\pid -> procGetProcessStatus (read pid :: ProcessID)) dirs+    return $ catMaybes status  -- | Get process status with given process id.-procGetProcessInfo :: ProcessID -> IO ProcessInfo-procGetProcessInfo pid =-    liftM words $ readFile $ procPath </> show pid </> procStatFile+procGetProcessInfo :: ProcessID -> IO (Maybe ProcessInfo)+procGetProcessInfo pid = do+  let filepath = procPath </> show pid </> procStatFile+  Exc.catch +     (liftM (Just . words) $ readFile filepath)+     (\(_ :: IOError) -> return Nothing) -- skip current file if failed with `readFile`  -- | Parse status from given info. procParseStatus :: ProcessInfo -> ProcStatus
proc.cabal view
@@ -1,5 +1,5 @@ name:			proc-version:		0.0.2+version:		0.0.3 Cabal-Version:	>= 1.8 license:		GPL-3 license-file:	LICENSE