在 GNU/Linux 中给进程指定一个特定的名称?

在 GNU/Linux 中给进程指定一个特定的名称?

我如何启动一个进程以便它在ps命令中有一个特定的标识符?

更新型多巴胺:我在一个机器上运行了几台服务器。它们大多数处于部署模式。但是有一台处于开发状态。所有服务器都是 Pythonic,问题在于所有服务器都列python在 中ps,这使得开发中的服务器无法killall保持其他服务器完好无损。

更新型多巴胺:根据 David 和 GNUix 的建议,我为每个服务器创建了指向 Python 解释器和 bash 脚本的符号链接。

答案1

创建符号链接应该可以解决问题,但是,如果我们知道疾病而不是症状,那会更有帮助。你到底想做什么?因为可能有更好的方法

gnuix@defiant)-(08:11pm-:-06/10)--
(~)./0012
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14020 pts/1    00:00:00 0012
14021 pts/1    00:00:00 ps
(gnuix@defiant)-(08:11pm-:-06/10)--
(~)ln -s 0012 weird
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)./weird 
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14046 pts/1    00:00:00 weird
14047 pts/1    00:00:00 ps
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)

更新: 根据额外的信息,您可以(我相信有更简单的方法,但目前我还没想起来)让您的服务器在启动时将其 PID 写入文件,然后您可以 kill -9 | cat /var/run/devserver.pid 但那将是一个编程问题:)

再次更新: 您还可以在启动服务器时使用一些 shell 技巧来获取服务器的 PID,我首先想到的是,您可以创建一个名为 startmyserver 的 shell 函数,例如,该函数将包装您用于启动服务器的命令,而且还会捕获 $!根据启动名称将其保存到文件中 - 然后我们讨论的是“入站”@ServerFault 的 shell 脚本。:-)

答案2

您可以重命名要运行的二进制文件。您可能只需使用二进制文件的符号链接即可。

如果您确实想更改名称,最好的方法是使用一个简单的包装器,设置 argv,然后执行要运行的进程。现在没有时间给您一些示例代码,但大约 10 小时后大声喊出来,我会看看我能做些什么。

答案3

看着https://github.com/electrum/procname. 它允许您使用环境变量设置任何进程的进程名称。

用法:

在设置了 LD_PRELOAD 和 PROCNAME 环境变量的情况下运行 Java:

LD_PRELOAD=/path/to/libprocname.so PROCNAME=hello java -jar foo.jar

答案4

这实际上不属于 SO,因为它是通用的,而不是特定于语言的问题。

简而言之,这不容易。也就是说,它无法通过 shell 或 procfs/sysfs 的功能来实现。您需要使用外部实用程序来实现它。

关于如何以及为什么这里。请注意,它非常以 C 为中心。

更新:

它们是 Python,可以改变游戏规则。现在还不算太糟,修改它们以利用它们可能会更容易模块或类似的方法。

相关内容