- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
以下(理所当然)不起作用:
package main
import (
"os"
"time"
)
func main() {
os.Args[0] = "custom name"
println("sleeping")
time.Sleep(1000 * time.Second)
println("done")
}
有些语言提供了 setting process name 的这个特性作为内置功能(例如,在 Ruby 中,这只是 assigning to $0
的问题)或作为第三方库 ( Python )。
我正在寻找至少可以在 Linux 上运行的解决方案。
最佳答案
有多种方法可以实现这一点,其中许多只在特定情况下有效。我真的不建议这样做,因为(一方面)它会导致您的流程在不同情况下以不同的名称出现。他们需要使用系统调用和/或不安全,所以你是在故意破坏 Go 语言的安全性。尽管如此,您的选择似乎是:
func SetProcessName(name string) error {
argv0str := (*reflect.StringHeader)(unsafe.Pointer(&os.Args[0]))
argv0 := (*[1 << 30]byte)(unsafe.Pointer(argv0str.Data))[:argv0str.Len]
n := copy(argv0, name)
if n < len(argv0) {
argv0[n] = 0
}
return nil
}
在 Go 中,您无权访问实际的 argv 数组本身(不调用内部运行时函数),因此您只能使用一个不超过当前进程名称长度的新名称。
这似乎主要适用于 Darwin 和 Linux。
func SetProcessName(name string) error {
bytes := append([]byte(name), 0)
ptr := unsafe.Pointer(&bytes[0])
if _, _, errno := syscall.RawSyscall6(syscall.SYS_PRCTL, syscall.PR_SET_NAME, uintptr(ptr), 0, 0, 0, 0); errno != 0 {
return syscall.Errno(errno)
}
return nil
}
新名称最多为 16 个字节。
这在 Darwin 上不起作用,而且在 Linux 上似乎也没什么作用,尽管它成功了并且 PR_GET_NAME 随后报告了正确的名称。不过,这可能是我的 Linux VM 的一些特殊之处。
关于linux - 在 Go 中设置进程名称(如 `ps` 所示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14926020/
我在 tomcat 8.0.24 上运行 Atlassian Bitbucket,在 Ubuntu 14.04.5 LTS 上运行 Java 1.8.0 31-b13(64 位),内核 3.13.0-
docker命令reference for ps提到 docker ps -a docker ps --all 命令显示所有容器的列表。 在docker上工作时,我错误地使用了以下命令 docker
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
docker ps 不让我知道容器本身的 pid。在主机上运行的 docker ps 和 ps 的输出之间进行命令字符串匹配并不是万无一失的,因为我可以在主机上运行相同的命令。 有没有人有确定的方法将
如何通过命令“ps”或“ps -ef”知道进程是在后台运行还是在前台运行? 我首先想到的是,当我输入 ps -ef 时,有一个名为 TTY 的部分。 当我查看 TTY 列表时,大多数都是“?” (问号
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在使用带有 3 个文件的 GUI 编写 PowerShell 脚本: window1.ps1 - 输入变量并启动start.vbs start.vbs - 启动window2.ps1 window
这似乎是一个愚蠢的问题,但我一直无法找到明确的答案。 This website指出破折号是可选的 ps aux 然而,ps aux有效但 ps -aux出现错误 no user named 'x' .
我有一个 bash 脚本 (ScreamDaemon.sh),在其中添加了检查它的示例是否已经运行的检查。 numscr=`ps aux | grep ScreamDaemon.sh | wc -l`
我需要解释一下 ps -ef 命令的四个字段(4 或 0),这个数字的含义谢谢你 root 27116 27112 4 15:25 pts/0 00:00:00 grep -qsRw -m1 moni
我刚开始学习 linux 命令,请帮助我找出 ps -ef 和 ps -ef | 之间的区别 | linux 中的 more 命令 最佳答案 与 ps -ef | more你管| ps 的输出至 mo
# ps | grep safe 14592 root 136m S /tmp/data/safe/safe 16210 root 1664 S grep safe
我有一个 bash 脚本 (ScreamDaemon.sh),在其中添加了检查它的示例是否已经运行的检查。 numscr=`ps aux | grep ScreamDaemon.sh | wc -l`
为什么 docker compose 创建的容器只能从 docker-compose ps 访问并且在杀死正在运行的容器后仍然存在? 最佳答案 不是。 docker ps只显示正在运行的容器,dock
我试图在 unix 框中找到所有正在运行的 java 进程。我很困惑 ps –ef|grep java 和 ps –ef|grep *.java 哪一个是正确的,确切的区别是什么? PS:两者都返回不
给定一个 pid 数组和代码: for i in ${listedPids[@]} do runningCheck="ps -u $USER | grep $i"
我的 PowerShell 配置文件 (CurrentUser.AllHosts) 中有两个脚本让我抓狂,因为它们在看似相同的控制台上给出了不同的结果。在 Powershell(提升版)上,脚本没有任
对于我正在创建的 python 脚本,我需要先获取进程的 PID(基于其名称),然后使用其 PID、持续时间从该进程获取,从下面的打印输出中,将是“00:00:00” root 5686
前言 大家好,我是 god23bin。欢迎来到《 一分钟学一个 Linux 命令 》系列, 每天只需一分钟,记住一个 Linux 命令不成问题 。今天要说的是 ps 命令。
我发现 ps aux 列出了当前正在运行的进程,我发现其他人提到了 ps auxwww .我想知道这是什么意思?或者它有什么作用? ps aux有什么区别和 ps auxwww ? 最佳答案 引用 m
我是一名优秀的程序员,十分优秀!