微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Haskell中设置argv ?

有没有办法在Haskell程序中设置argv[0] (比如用ghc编译的)?

我在System.Environment中find了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

我怎么知道哪个libstdc ++双重转换想要?

Haskell开发环境的工具? (Linux)

Haskell行不会执行:do {n < – readLn; print(n ^ 2)}

如何在linux下更改haskell进程的名字

如何从源头上完全引导GHC和cabal

创build一个静态的Haskell Linux可执行文件

部署Yesodnetworking应用程序

ansi-terminal:在Windows上意外的行为

根据windows下的iconv构build一个Haskell程序

Ubuntu上的Haskell(GHC)中的ThreadDelay问题

这样做没有可移植的方法,但是在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返回的值似乎被缓存,因此您必须将其与withProgName结合使用withProgName在程序中查看更改。

程序名称在程序启动时是固定的,因此任何更改报告程序名称的机制都是特定于操作系统的。 据我所知,没有办法用标准库来做到这一点,快速搜索Hackage并没有显示任何东西。 我不确定有什么办法可以用Linux来完成,除了用不同的argv[0]重新执行相同的程序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐