猿问

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

以下(正确地)不起作用:


package main


import (

        "os"

        "time"

)


func main() {

        os.Args[0] = "custom name"

        println("sleeping")

        time.Sleep(1000 * time.Second)

        println("done")

}

某些语言提供了将进程名称设置为内置功能(例如,在Ruby中仅是分配给的问题 $0)或作为第三方库(Python)的功能。


我正在寻找一种至少可以在Linux上运行的解决方案。


繁华开满天机
浏览 504回答 3
3回答

尚方宝剑之说

要在Linux上更改进程名称,您需要将prctl系统调用与该PR_SET_NAME选项结合使用。目前,我认为您无法在Go代码中做到这一点。但是,您可以构建一个小的C模块来执行此操作,然后将其集成到Go构建中。

一只萌萌小番薯

我认为“流程标题”不是一个明确定义的术语。无论如何,Ruby与Go有什么关系?os.Args的文档没有提及任何“流程标题”,也没有说明分配给切片项时会发生任何魔术。后者实际上是Go的常规属性。没有用于结构域,数组/切片项的变量的灵巧的获取器/设置器,因此简单的赋值只是分配并且不执行任何操作,也不能执行任何其他操作。简而言之,缺乏魔术是预期的正确行为。为了通过“ os”软件包来处理除可移植属性之外的其他过程属性,必须以特定于平台的方式使用“ syscall”软件包。但是,构建约束(在此讨论)可以帮助正确处理跨平台的内容。
随时随地看视频慕课网APP

相关分类

Go
我要回答