Skip to content

Instantly share code, notes, and snippets.

@TiltMeSenpai
Last active March 10, 2017 20:38
Show Gist options
  • Save TiltMeSenpai/b981357ea241b11503ac0d505632eabf to your computer and use it in GitHub Desktop.
Save TiltMeSenpai/b981357ea241b11503ac0d505632eabf to your computer and use it in GitHub Desktop.
fuck proc(5)
{-# OPTIONS_GHC -funbox-strict-fields #-}
module Util where
import Data.Attoparsec.ByteString.Char8
divOut :: Int -> [Int] -> [Int]
divOut x (y:ys)
| x > y = go ys $ divMod x y
| otherwise = [x]
where
go :: [Int] -> (Int, Int) -> [Int]
go ys (d, m) = m:divOut d ys
divOut x [] = [x]
data PidState = PidRunning | PidSleeping | PidWaiting
| PidZombie | PidStopped | PidPaging
| PidDead | PidWakekill | PidWaking
| PidParked
-- Why, linux... why...
data PidStat = Stat
{ pid :: !Int
, comm :: !String
, state :: !PidState
, ppid :: !Int
, pgrp :: !Int
, session :: !Int
, tty_nr :: !Int
, tpgid :: !Int
, flags :: !Int
, minflt :: !Int
, majflt :: !Int
, cmajflt :: !Int
, utime :: !Int
, stime :: !Int
, cutime :: !Int
, cstime :: !Int
, priority :: !Int
, nice :: !Int
, num_threads :: !Int
, itrealvalue :: !Int
, starttime :: !Int
, vsize :: !Int
, rss :: !Int
, rsslim :: !Int
, startcode :: !Int
, endcode :: !Int
, startstack :: !Int
, ktskep :: !Int
, ktskeip :: !Int
, signal :: !Int
, blocked :: !Int
, sigignore :: !Int
, sigcatch :: !Int
, wchan :: !Int
, nswap :: !Int
, cnswap :: !Int
, exit_signal :: !Int
, processor :: !Int
, rt_priority :: !Int
, policy :: !Int
, delayacct_blkio_ticks :: !Int
, guest_time :: !Int
, cguest_time :: !Int
, start_data :: !Int
, end_data :: !Int
, start_brk :: !Int
, arg_start :: !Int
, arg_end :: !Int
, env_start :: !Int
, env_end :: !Int
, exit_code :: !Int
}
parsePidStat :: Parser PidStat
parsePidStat = Stat
<$> (skipSpace *> decimal)
<*> (skipSpace *>
( char '('
*> (show <$> takeTill (==')'))
<* char ')'
))
<*> (skipSpace *> choice
[ char 'R' *> pure PidRunning
, char 'S' *> pure PidSleeping
, char 'D' *> pure PidWaiting
, char 'Z' *> pure PidZombie
, char 'T' *> pure PidStopped
, char 't' *> pure PidStopped
, char 'W' *> pure PidPaging
, char 'X' *> pure PidDead
, char 'x' *> pure PidDead
, char 'K' *> pure PidWakekill
, char 'W' *> pure PidWaking
, char 'P' *> pure PidParked
])
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
<*> (skipSpace *> decimal)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment