{-# LINE 1 "System/Posix/Process/ByteString.hsc" #-}{-# LANGUAGE Safe #-}------------------------------------------------------------------------------- |-- Module : System.Posix.Process.ByteString-- Copyright : (c) The University of Glasgow 2002-- License : BSD-style (see the file libraries/base/LICENSE)---- Maintainer : libraries@haskell.org-- Stability : provisional-- Portability : non-portable (requires POSIX)---- POSIX process support. See also the System.Cmd and System.Process-- modules in the process package.-------------------------------------------------------------------------------moduleSystem.Posix.Process.ByteString(-- * Processes-- ** Forking and executingforkProcess ,forkProcessWithUnmask ,executeFile ,-- ** ExitingexitImmediately ,-- ** Process environmentgetProcessID ,getParentProcessID ,-- ** Process groupsgetProcessGroupID ,getProcessGroupIDOf ,createProcessGroupFor ,joinProcessGroup ,setProcessGroupIDOf ,-- ** SessionscreateSession ,-- ** Process timesProcessTimes (..),getProcessTimes ,-- ** Scheduling prioritynice ,getProcessPriority ,getProcessGroupPriority ,getUserPriority ,setProcessPriority ,setProcessGroupPriority ,setUserPriority ,-- ** Process statusProcessStatus (..),getProcessStatus ,getAnyProcessStatus ,getGroupProcessStatus ,-- ** DeprecatedcreateProcessGroup ,setProcessGroupID ,)whereimportForeignimportSystem.Posix.Process.Internals importSystem.Posix.Process.Common importForeign.Chiding(throwErrnoPath,throwErrnoPathIf,throwErrnoPathIf_,throwErrnoPathIfNull,throwErrnoPathIfMinus1,throwErrnoPathIfMinus1_)importData.ByteString(ByteString)importqualifiedData.ByteString.Char8asBCimportSystem.Posix.ByteString.FilePath {-# LINE 91 "System/Posix/Process/ByteString.hsc" #-}-- | @'executeFile' cmd args env@ calls one of the-- @execv*@ family, depending on whether or not the current-- PATH is to be searched for the command, and whether or not an-- environment is provided to supersede the process's current-- environment. The basename (leading directory names suppressed) of-- the command is passed to @execv*@ as @arg[0]@;-- the argument list passed to 'executeFile' therefore-- begins with @arg[1]@.executeFile ::RawFilePath -- ^ Command->Bool-- ^ Search PATH?->[ByteString]-- ^ Arguments->Maybe[(ByteString,ByteString)]-- ^ Environment->IOa {-# LINE 112 "System/Posix/Process/ByteString.hsc" #-}executeFile :: forall a. RawFilePath -> Bool -> [RawFilePath] -> Maybe [(RawFilePath, RawFilePath)] -> IO a executeFile RawFilePath path Bool search [RawFilePath] args Maybe [(RawFilePath, RawFilePath)] Nothing=doRawFilePath -> (Ptr CChar -> IO a) -> IO a forall a. RawFilePath -> (Ptr CChar -> IO a) -> IO a withFilePath RawFilePath path ((Ptr CChar -> IO a) -> IO a) -> (Ptr CChar -> IO a) -> IO a forall a b. (a -> b) -> a -> b $\Ptr CChar s ->(RawFilePath -> (Ptr CChar -> IO a) -> IO a) -> [RawFilePath] -> ([Ptr CChar] -> IO a) -> IO a forall a b res. (a -> (b -> res) -> res) -> [a] -> ([b] -> res) -> res withManyRawFilePath -> (Ptr CChar -> IO a) -> IO a forall a. RawFilePath -> (Ptr CChar -> IO a) -> IO a withFilePath (RawFilePath path RawFilePath -> [RawFilePath] -> [RawFilePath] forall a. a -> [a] -> [a] :[RawFilePath] args )(([Ptr CChar] -> IO a) -> IO a) -> ([Ptr CChar] -> IO a) -> IO a forall a b. (a -> b) -> a -> b $\[Ptr CChar] cstrs ->Ptr CChar -> [Ptr CChar] -> (Ptr (Ptr CChar) -> IO a) -> IO a forall a b. Storable a => a -> [a] -> (Ptr a -> IO b) -> IO b withArray0Ptr CChar forall a. Ptr a nullPtr[Ptr CChar] cstrs ((Ptr (Ptr CChar) -> IO a) -> IO a) -> (Ptr (Ptr CChar) -> IO a) -> IO a forall a b. (a -> b) -> a -> b $\Ptr (Ptr CChar) arr ->doIO () pPrPr_disableITimers ifBool search thenString -> RawFilePath -> IO CInt -> IO () forall a. (Eq a, Num a) => String -> RawFilePath -> IO a -> IO () throwErrnoPathIfMinus1_ String "executeFile"RawFilePath path (Ptr CChar -> Ptr (Ptr CChar) -> IO CInt c_execvp Ptr CChar s Ptr (Ptr CChar) arr )elseString -> RawFilePath -> IO CInt -> IO () forall a. (Eq a, Num a) => String -> RawFilePath -> IO a -> IO () throwErrnoPathIfMinus1_ String "executeFile"RawFilePath path (Ptr CChar -> Ptr (Ptr CChar) -> IO CInt c_execv Ptr CChar s Ptr (Ptr CChar) arr )a -> IO a forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a returna forall a. HasCallStack => a undefined-- never reachedexecuteFile RawFilePath path Bool search [RawFilePath] args (Just[(RawFilePath, RawFilePath)] env )=doRawFilePath -> (Ptr CChar -> IO a) -> IO a forall a. RawFilePath -> (Ptr CChar -> IO a) -> IO a withFilePath RawFilePath path ((Ptr CChar -> IO a) -> IO a) -> (Ptr CChar -> IO a) -> IO a forall a b. (a -> b) -> a -> b $\Ptr CChar s ->(RawFilePath -> (Ptr CChar -> IO a) -> IO a) -> [RawFilePath] -> ([Ptr CChar] -> IO a) -> IO a forall a b res. (a -> (b -> res) -> res) -> [a] -> ([b] -> res) -> res withManyRawFilePath -> (Ptr CChar -> IO a) -> IO a forall a. RawFilePath -> (Ptr CChar -> IO a) -> IO a withFilePath (RawFilePath path RawFilePath -> [RawFilePath] -> [RawFilePath] forall a. a -> [a] -> [a] :[RawFilePath] args )(([Ptr CChar] -> IO a) -> IO a) -> ([Ptr CChar] -> IO a) -> IO a forall a b. (a -> b) -> a -> b $\[Ptr CChar] cstrs ->Ptr CChar -> [Ptr CChar] -> (Ptr (Ptr CChar) -> IO a) -> IO a forall a b. Storable a => a -> [a] -> (Ptr a -> IO b) -> IO b withArray0Ptr CChar forall a. Ptr a nullPtr[Ptr CChar] cstrs ((Ptr (Ptr CChar) -> IO a) -> IO a) -> (Ptr (Ptr CChar) -> IO a) -> IO a forall a b. (a -> b) -> a -> b $\Ptr (Ptr CChar) arg_arr ->letenv' :: [RawFilePath] env' =((RawFilePath, RawFilePath) -> RawFilePath) -> [(RawFilePath, RawFilePath)] -> [RawFilePath] forall a b. (a -> b) -> [a] -> [b] map(\(RawFilePath name ,RawFilePath val )->RawFilePath name RawFilePath -> RawFilePath -> RawFilePath `BC.append`(Char '='Char -> RawFilePath -> RawFilePath `BC.cons`RawFilePath val ))[(RawFilePath, RawFilePath)] env in(RawFilePath -> (Ptr CChar -> IO a) -> IO a) -> [RawFilePath] -> ([Ptr CChar] -> IO a) -> IO a forall a b res. (a -> (b -> res) -> res) -> [a] -> ([b] -> res) -> res withManyRawFilePath -> (Ptr CChar -> IO a) -> IO a forall a. RawFilePath -> (Ptr CChar -> IO a) -> IO a withFilePath [RawFilePath] env' (([Ptr CChar] -> IO a) -> IO a) -> ([Ptr CChar] -> IO a) -> IO a forall a b. (a -> b) -> a -> b $\[Ptr CChar] cenv ->Ptr CChar -> [Ptr CChar] -> (Ptr (Ptr CChar) -> IO a) -> IO a forall a b. Storable a => a -> [a] -> (Ptr a -> IO b) -> IO b withArray0Ptr CChar forall a. Ptr a nullPtr[Ptr CChar] cenv ((Ptr (Ptr CChar) -> IO a) -> IO a) -> (Ptr (Ptr CChar) -> IO a) -> IO a forall a b. (a -> b) -> a -> b $\Ptr (Ptr CChar) env_arr ->doIO () pPrPr_disableITimers ifBool search thenString -> RawFilePath -> IO CInt -> IO () forall a. (Eq a, Num a) => String -> RawFilePath -> IO a -> IO () throwErrnoPathIfMinus1_ String "executeFile"RawFilePath path (Ptr CChar -> Ptr (Ptr CChar) -> Ptr (Ptr CChar) -> IO CInt c_execvpe Ptr CChar s Ptr (Ptr CChar) arg_arr Ptr (Ptr CChar) env_arr )elseString -> RawFilePath -> IO CInt -> IO () forall a. (Eq a, Num a) => String -> RawFilePath -> IO a -> IO () throwErrnoPathIfMinus1_ String "executeFile"RawFilePath path (Ptr CChar -> Ptr (Ptr CChar) -> Ptr (Ptr CChar) -> IO CInt c_execve Ptr CChar s Ptr (Ptr CChar) arg_arr Ptr (Ptr CChar) env_arr )a -> IO a forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a returna forall a. HasCallStack => a undefined-- never reachedforeignimportccallunsafe"execvp"c_execvp ::CString->PtrCString->IOCIntforeignimportccallunsafe"execv"c_execv ::CString->PtrCString->IOCIntforeignimportccallunsafe"execve"c_execve ::CString->PtrCString->PtrCString->IOCInt{-# LINE 148 "System/Posix/Process/ByteString.hsc" #-}