在Haskell中设置argv [0]?

前端之家收集整理的这篇文章主要介绍了在Haskell中设置argv [0]?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在 Haskell程序中设置argv [0](比如,用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
没有这样做的便携式方法,但是在Linux 2.6.9上,使用PR_SET_NAME操作可以使用 prctl()更改进程名称,所以我们只需要一点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

这似乎改变了ps所看到的名称.但是,当程序启动时,getProgName返回的值似乎被缓存,因此您必须将它与-progName组合以查看程序中的更改.

原文链接:https://www.f2er.com/ubuntu/347294.html

猜你在找的Ubuntu相关文章