我如何启动一个进程以便它在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