proc 0.0.2 → 0.0.3
raw patch · 2 files changed
+25/−12 lines, 2 files
Files
- System/Linux/Proc.hs +24/−11
- proc.cabal +1/−1
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