{-# LINE 1 "System/Posix/Process/Internals.hsc" #-}{-# LANGUAGE CApiFFI #-}{-# LANGUAGE Trustworthy #-}moduleSystem.Posix.Process.Internals(pPrPr_disableITimers ,c_execvpe ,decipherWaitStatus ,ProcessStatus (..))whereimportForeignimportForeign.CimportSystem.ExitimportSystem.IO.ErrorimportGHC.Conc(Signal){-# LINE 20 "System/Posix/Process/Internals.hsc" #-}-- | The exit status of a processdataProcessStatus =Exited ExitCode-- ^ the process exited by calling-- @exit()@ or returning from @main@|Terminated SignalBool-- ^ the process was terminated by a-- signal, the @Bool@ is @True@ if a core-- dump was produced---- @since 2.7.0.0|Stopped Signal-- ^ the process was stopped by a signalderiving(ProcessStatus -> ProcessStatus -> Bool
(ProcessStatus -> ProcessStatus -> Bool)
-> (ProcessStatus -> ProcessStatus -> Bool) -> Eq ProcessStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ProcessStatus -> ProcessStatus -> Bool
== :: ProcessStatus -> ProcessStatus -> Bool
$c/= :: ProcessStatus -> ProcessStatus -> Bool
/= :: ProcessStatus -> ProcessStatus -> Bool
Eq,Eq ProcessStatus
Eq ProcessStatus =>
(ProcessStatus -> ProcessStatus -> Ordering)
-> (ProcessStatus -> ProcessStatus -> Bool)
-> (ProcessStatus -> ProcessStatus -> Bool)
-> (ProcessStatus -> ProcessStatus -> Bool)
-> (ProcessStatus -> ProcessStatus -> Bool)
-> (ProcessStatus -> ProcessStatus -> ProcessStatus)
-> (ProcessStatus -> ProcessStatus -> ProcessStatus)
-> Ord ProcessStatus
ProcessStatus -> ProcessStatus -> Bool
ProcessStatus -> ProcessStatus -> Ordering
ProcessStatus -> ProcessStatus -> ProcessStatus
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: ProcessStatus -> ProcessStatus -> Ordering
compare :: ProcessStatus -> ProcessStatus -> Ordering
$c< :: ProcessStatus -> ProcessStatus -> Bool
< :: ProcessStatus -> ProcessStatus -> Bool
$c<= :: ProcessStatus -> ProcessStatus -> Bool
<= :: ProcessStatus -> ProcessStatus -> Bool
$c> :: ProcessStatus -> ProcessStatus -> Bool
> :: ProcessStatus -> ProcessStatus -> Bool
$c>= :: ProcessStatus -> ProcessStatus -> Bool
>= :: ProcessStatus -> ProcessStatus -> Bool
$cmax :: ProcessStatus -> ProcessStatus -> ProcessStatus
max :: ProcessStatus -> ProcessStatus -> ProcessStatus
$cmin :: ProcessStatus -> ProcessStatus -> ProcessStatus
min :: ProcessStatus -> ProcessStatus -> ProcessStatus
Ord,Int -> ProcessStatus -> ShowS
[ProcessStatus] -> ShowS
ProcessStatus -> String
(Int -> ProcessStatus -> ShowS)
-> (ProcessStatus -> String)
-> ([ProcessStatus] -> ShowS)
-> Show ProcessStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ProcessStatus -> ShowS
showsPrec :: Int -> ProcessStatus -> ShowS
$cshow :: ProcessStatus -> String
show :: ProcessStatus -> String
$cshowList :: [ProcessStatus] -> ShowS
showList :: [ProcessStatus] -> ShowS
Show)-- this function disables the itimer, which would otherwise cause confusing-- signals to be sent to the new process.foreignimportcapiunsafe"Rts.h stopTimer"pPrPr_disableITimers ::IO()foreignimportccallunsafe"__hsunix_execvpe"c_execvpe ::CString->PtrCString->PtrCString->IOCInt{-# LINE 48 "System/Posix/Process/Internals.hsc" #-}decipherWaitStatus ::CInt->IOProcessStatus decipherWaitStatus :: CInt -> IO ProcessStatus
decipherWaitStatus CInt
wstat =ifCInt -> CInt
c_WIFEXITED CInt
wstat CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
/=CInt
0thendoletexitstatus :: CInt
exitstatus =CInt -> CInt
c_WEXITSTATUS CInt
wstat ifCInt
exitstatus CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
==CInt
0thenProcessStatus -> IO ProcessStatus
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(ExitCode -> ProcessStatus
Exited ExitCode
ExitSuccess)elseProcessStatus -> IO ProcessStatus
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(ExitCode -> ProcessStatus
Exited (Int -> ExitCode
ExitFailure(CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegralCInt
exitstatus )))elsedoifCInt -> CInt
c_WIFSIGNALED CInt
wstat CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
/=CInt
0thendolettermsig :: CInt
termsig =CInt -> CInt
c_WTERMSIG CInt
wstat letcoredumped :: Bool
coredumped =CInt -> CInt
c_WCOREDUMP CInt
wstat CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
/=CInt
0ProcessStatus -> IO ProcessStatus
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(CInt -> Bool -> ProcessStatus
Terminated CInt
termsig Bool
coredumped )elsedoifCInt -> CInt
c_WIFSTOPPED CInt
wstat CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
/=CInt
0thendoletstopsig :: CInt
stopsig =CInt -> CInt
c_WSTOPSIG CInt
wstat ProcessStatus -> IO ProcessStatus
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(CInt -> ProcessStatus
Stopped CInt
stopsig )elsedoIOError -> IO ProcessStatus
forall a. IOError -> IO a
ioError(IOErrorType -> String -> Maybe Handle -> Maybe String -> IOError
mkIOErrorIOErrorType
illegalOperationErrorTypeString
"waitStatus"Maybe Handle
forall a. Maybe a
NothingMaybe String
forall a. Maybe a
Nothing)foreignimportcapiunsafe"HsUnix.h WIFEXITED"c_WIFEXITED ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WEXITSTATUS"c_WEXITSTATUS ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WIFSIGNALED"c_WIFSIGNALED ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WTERMSIG"c_WTERMSIG ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WIFSTOPPED"c_WIFSTOPPED ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WSTOPSIG"c_WSTOPSIG ::CInt->CIntforeignimportcapiunsafe"HsUnix.h WCOREDUMP"c_WCOREDUMP ::CInt->CInt{-# LINE 95 "System/Posix/Process/Internals.hsc" #-}

AltStyle によって変換されたページ (->オリジナル) /