on master help sign in
Check if ss command is available on system
commit5aeb14df78edb8dfeca62891f05d40431f4f8d53 authorDivam <dfordivam@gmail.com> dateWed 19 Dec 2018, 20:21 (8 years ago) parent66bf5a6
1 file changed+10−4
lib/run/src/Obelisk/Run.hs+10−4
lib/run/src/Obelisk/Run.hs+10−4
@@ -58,6 +58,7 @@ import Snap.Core (Snap)
5858import System.Environment
5959import System.IO
6060import System.Process
61+import System.Exit (ExitCode(..))
6162import Text.URI (URI)
6263import qualified Text.URI as URI
6364import Text.URI.Lens
@@ -170,10 +171,15 @@ logPortBindErr p e = getProcessIdForPort p >>= \case
170171
171172getProcessIdForPort :: Int -> IO (Maybe Int)
172173getProcessIdForPort port = do
173− xs <- lines <$> readProcess "ss" ["-lptn", "sport = " <> show port] mempty
174− case uncons xs of
175− Just (_, x:_) -> return $ A.maybeResult $ A.parse parseSsPid $ BSC.pack x
176− _ -> return Nothing
174+ -- First check if 'ss' is available
175+ (c, _, _) <- readProcessWithExitCode "which" ["ss"] mempty
176+ case c of
177+ ExitSuccess -> do
178+ xs <- lines <$> readProcess "ss" ["-lptn", "sport = " <> show port] mempty
179+ case uncons xs of
180+ Just (_, x:_) -> return $ A.maybeResult $ A.parse parseSsPid $ BSC.pack x
181+ _ -> return Nothing
182+ _ -> return Nothing
177183
178184parseSsPid :: A.Parser Int
179185parseSsPid = do