为了账号安全,请及时绑定邮箱和手机立即绑定

在Go中设置进程名称(如`ps`所示)

在Go中设置进程名称(如`ps`所示)

Go
繁华开满天机 2021-05-05 17:08:22
以下(正确地)不起作用:package mainimport (        "os"        "time")func main() {        os.Args[0] = "custom name"        println("sleeping")        time.Sleep(1000 * time.Second)        println("done")}某些语言提供了将进程名称设置为内置功能(例如,在Ruby中仅是分配给的问题 $0)或作为第三方库(Python)的功能。我正在寻找一种至少可以在Linux上运行的解决方案。
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

要在Linux上更改进程名称,您需要将prctl系统调用与该PR_SET_NAME选项结合使用。

目前,我认为您无法在Go代码中做到这一点。但是,您可以构建一个小的C模块来执行此操作,然后将其集成到Go构建中。


查看完整回答
反对 回复 2021-05-31
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

我认为“流程标题”不是一个明确定义的术语。无论如何,Ruby与Go有什么关系?os.Args的文档没有提及任何“流程标题”,也没有说明分配给切片项时会发生任何魔术。后者实际上是Go的常规属性。没有用于结构域,数组/切片项的变量的灵巧的获取器/设置器,因此简单的赋值只是分配并且不执行任何操作,也不能执行任何其他操作。

简而言之,缺乏魔术是预期的正确行为。

为了通过“ os”软件包来处理除可移植属性之外的其他过程属性,必须以特定于平台的方式使用“ syscall”软件包。但是,构建约束(在此讨论)可以帮助正确处理跨平台的内容。


查看完整回答
反对 回复 2021-05-31
  • 3 回答
  • 0 关注
  • 503 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信