在GNU / Linux中为进程指定特定名称?


10

如何启动进程,以便在ps命令中具有特定的标识符?

UPD:我有几个服务器在一个盒子上运行。其中大多数处于部署模式。然而,一个正在开发中。所有服务器都是Pythonic的,其病态是所有服务器都列在pythonps,这使得killall开发中的服务器不可能完好无损。

UPD:正如David和GNUix所建议的那样,我为每个服务器创建了指向Python解释器和bash脚本的符号链接。

Answers:


7

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

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写入文件,那么您可以杀死-9 | cat /var/run/devserver.pid,但是那将是一个编程问题:)

再次更新: 启动服务器时,您还可以做一些技巧来获取服务器的PID,在我的头上,您可以创建一个名为startmyserver的shell函数,该函数将包装用于启动服务器的命令,但是还捕获$!到基于启动名称的文件-然后我们讨论的是Shell脚本,即“ inbounds” @ ServerFault。:-)


4

您可以重命名要运行的二进制文件。您可能仅使用指向二进制文件的符号链接就可以摆脱困境。

如果您确实要更改名称,最好的方法是使用一个简单的包装器,该包装器设置argv,然后执行您要运行的进程。现在没有时间给您提供一些示例代码,但是请在大约10个小时后大声喊叫,然后我会解决。


正是我的意思。您需要该代码(除了重命名/(符号)链接二进制文件(如果它检查argv [0]可能会有问题))
Martin M.

如果您大多数情况下是嵌入式的,则某些二进制文件将无法正常工作(busybox,dropbear)
2015年

3

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

用法:

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

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


2

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

简短的答案并不容易。也就是说,不能从您的Shell或procfs / sysfs的功能内完成此操作。您将需要使用外部实用程序来实现它。

关于如何以及为什么在这里有很长的描述。当心它是非常以C为中心的。

更新:

他们是改变游戏规则的蟒蛇。无需太过费力,可能更容易修改它们以使用模块或类似方法。


我知道有个更简单的方法:)
GNUix

由于C代码的输出量很大,因此其冗长得多。应该可以缩小它,但是它的工作几乎与我建议的一样。只有一些代码可以配合它:)缺少执行程序的
高管才
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.