在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组合以查看程序中的更改.

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...