在 Haskell 中设置 argv[0]?

2023-11-21

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

我找到了getProgName and withProgNameSystem.Environment 中的函数,但它似乎没有改变什么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 及更高版本上,可以使用以下命令更改进程名称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

这似乎可以很好地更改名称,如ps。但是,返回的值getProgName似乎在程序启动时被缓存,因此您必须将其与withProgName查看程序中的更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Haskell 中设置 argv[0]? 的相关文章

随机推荐

  • 着色器中包围体层次结构的遍历

    我正在使用 vulkan 计算着色器开发路径跟踪器 我实现了一棵树代表包围体层次结构 BVH 的想法是最大限度地减少需要执行光线相交测试的对象数量 1 简单的实施 我的第一个实现非常快 它遍历树到singleBVH 树的叶子 然而 射线可能
  • Android 设置 View.GONE 不会“释放”列表视图中的空间

    我有一个列表视图 其中包含一些可以标记为 完成 的项目 还有一个切换按钮显示 隐藏已完成的项目 但是 当我通过设置 setVisibility View GONE 隐藏项目时 列表中仍然留有空间 在列表视图中切换列表项应该不那么困难吧 将
  • Android IRC Office Hours 关于 Android 蓝牙 RSSI 的问题

    我对 Android 2 0 或 2 1 上的蓝牙 RSSI 功能有疑问 创建蓝牙连接时获取 RSSI 值很容易 但是如何重复获取已处于活动状态的连接的 RSSI 值呢 能够做到这一点非常重要 因为这可以让您确定蓝牙设备是否彼此靠近或远离
  • C# Selenium WebDriver FireFox 配置文件 - 使用带有身份验证的代理

    当您在下面的代码中设置代理服务器参数时 如果您的代理服务器需要身份验证 那么FireFox将带来身份验证对话框 基本上您无法自动填写它 那么有什么办法可以设置吗USERNAME and PASSWORD FirefoxProfile pro
  • ASP.Net MVC 授权操作过滤器

    我试图了解在 MVC Preview 4 中使用授权 Authorize 操作筛选器时错误处理的工作原理 我有一个看起来像这样的动作 Authorize Roles DOMAIN NOTAUTHORISED ROLE HandleError
  • 是否可以使用表单身份验证来保护 Web 服务的安全?

    我们正在寻求保护大量 ASP Net 2 0 asmx Web 服务的安全 将托管 Web 服务的表单已经经过身份验证 是否可以使用表单身份验证来保护 Web 服务的安全 实现这一目标的优点和缺点是什么以及其他可能的方法 我们当然不想在每个
  • 获取 MongoDB 数组字段中给定元素的索引

    想想这个 MongoDB 文档 id 123 food apple banana mango 问题 如何获得位置mango在食物中 查询应该返回2上面的内容 并且不要返回整个文档 请显示工作查询 从 MongoDB 3 4 版本开始我们可以
  • 从集合中删除文件

    我有一个目录 其中包含的文件要么属于构成 Qt 项目的集合 要么包含其他文件 也就是说 文件 A cxx ADriver cxx 和 A ui 都属于需要使用 Qt 选项进行编译的集合 然后我有一个非 qt 的文件 B cxx 然后C cx
  • 重载超类的函数

    C 标准中是否有某些内容阻止我重载超类的函数 从这对类开始 class A super class int x public void foo int y x y original definition class B public A d
  • 我应该对 jQuery 插件的缩小版本进行版本控制吗?

    假设我编写了一个 jQuery 插件并将其添加到我的存储库 在我的例子中为 Mercurial 这是一个单一文件 比如说jquery plugin js 我使用 BitBucket 来管理此存储库 其功能之一是下载页面 所以 我补充一下jq
  • 如何找出touchmove javascript事件的实际event.target?

    我正在尝试在我的 Web 应用程序中开发一个简单的拖放 UI 可以用鼠标或手指拖动项目 然后将其放入多个放置区域之一 当一个项目被拖过放置区域 但尚未释放 时 该区域会突出显示 标记安全着陆位置 这对于鼠标事件来说工作得很好 但我在 iPh
  • PyInstaller 文件大小非常大

    我使用 wxPython 制作了简单的代码编辑器 文件大小 Python 文件 为 1 3 KB 但是当我使用 PyInstaller 创建可执行文件时 我得到30 MB 文件 有没有办法减小文件大小 顺便说一句 我没有导入整个wx库 只有
  • Discord Bot 无法按名称或 ID 找到频道

    我正在尝试使用 DiscordJS 制作一个不和谐机器人 我想获取特定频道 const Discord require discord js var bot new Discord Client var myToken NDQ2OTQ1 v
  • Font-face 在 IE、otf 字体中不起作用

    我知道这个问题被问过多次 但在尝试后我无法让它工作 这是我用来导入自定义字体的简单 CSS 另外 我将其与引导程序一起使用 font face font family Montserrat Black src url Montserrat
  • 在成员函数内的 lambda 捕获列表中使用数据成员

    以下代码可以使用 gcc 4 5 1 进行编译 但不能使用 VS2010 SP1 进行编译 include
  • 退出 Smarty 以手动执行

    我面临的问题是 我不太确定如何在没有框架或模板引擎的情况下进行开发 我开始以这种方式编码 现在我想学习基础知识 我曾经使用过这种 MVC 模式 使用 Codeigniter 和 Smarty 作为模板引擎 我现在想做的是使用原始 php 而
  • 从远程 ssh 存储库进行 Git 克隆 - 在执行克隆命令之前更改远程网络上的机器

    我想将 git 存储库从我公司的服务器克隆到我的个人计算机 从 外部 访问这些服务器的唯一方法是通过 ssh 登录到 machine1 ssh email protected 不幸的是 git 没有安装在该特定机器上 所以像这样的 git
  • 如何提取

    标签之间的文本

    我想从 HTML 页面中提取文本p and li标签 这样我就可以开始对页面进行标记 为每个页面构建倒排索引 以便回答搜索查询 我怎样才能得到p使用 jsoup 的标签 Elements e doc select 该参数中要写入的字符串是什
  • 传递数据帧以在函数内进行变异

    我想传递一个数据框及其列 以供函数内的 dplyr 的 mutate 处理 这是一个例子 multifun lt function dataf vari mutate dataf newvar vari 2 multifun mtcars
  • 在 Haskell 中设置 argv[0]?

    有没有办法设置argv 0 在 Haskell 程序中 例如 用 ghc 编译的程序 我找到了getProgName and withProgNameSystem Environment 中的函数 但它似乎没有改变什么ps报告 Ubuntu