Eri*_*ikR 9 ubuntu haskell ps argv
有没有办法argv[0]在Haskell程序中设置(比如用ghc编译的程序)?
我在System.Environment中找到了getProgName和withProgName函数,但它似乎没有改变什么ps报告(Ubuntu).
import System.Environment
main =
do name <- getProgName
putStrLn $ "Hello, my name is " ++ name
withProgName "other" $ do
newname <- getProgName
putStrLn $ "Name now set to " ++ newname
putStrLn "What is your name: "
-- allow time to run ps
ans <- getLine
putStrLn $ "Pleased to meet you, " ++ ans
Run Code Online (Sandbox Code Playgroud)
ham*_*mar 16
没有可移植的方法,但在Linux 2.6.9及更高版本上,可以prctl()使用PR_SET_NAME操作更改进程名称,因此我们只需要一点FFI就可以从Haskell中使用它.(检查Hackage上是否有任何绑定通常是一个好主意,但在这种情况下我找不到任何绑定).
{-# LANGUAGE ForeignFunctionInterface #-}
import Foreign.C
foreign import ccall "sys/prctl.h prctl"
prctl :: CInt -> CString -> CULong -> CULong -> CULong -> IO CInt
setProgName :: String -> IO ()
setProgName title =
withCString title $ \title' -> do
res <- prctl pr_set_name title' 0 0 0
return ()
where pr_set_name = 15
Run Code Online (Sandbox Code Playgroud)
这似乎可以正常改变名称ps.但是,返回的值getProgName似乎在程序启动时被缓存,因此您必须将其与此结合withProgName才能查看程序中的更改.
| 归档时间: |
|
| 查看次数: |
694 次 |
| 最近记录: |