如何启动一个进程,以便在ps命令中有一个特定的标识符?
UPD :我有一个盒子上运行的几台服务器。 他们中的大多数都处于部署模式。 但是一个正在发展中。 所有的服务器都是Pythonic,所有的服务器都是以psforms列出来的,这使得开发人员不可能完好无损。
UPD :由于David和GNUixbuild议我为每个服务器的Python解释器和bash脚本创build符号链接。
创build一个符号链接应该可以做到这一点,但是,如果我们知道疾病而不是症状,那将会更有帮助。 你到底在做什么? 因为可能有更好的办法
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 | 猫/var/run/devserver.pid但那么这将是一个编程问题:)
再次更新:当你启动服务器的时候,你也可以做一些欺骗手段来获得服务器的PID,closures我的头顶,你可以创build一个名为startmyserver的shell函数,例如,将包装你用来启动服务器的命令,但是还捕获$! 到一个基于启动名称的文件 – 那么我们正在谈论shell脚本,这是'inbounds'@ ServerFault。 🙂
你可以重命名你要运行的二进制文件。 你可能只是使用一个符号链接到二进制文件。
如果你真的想改变这个名字,最好的办法是使用一个简单的包装来设置argv,然后执行你想要运行的进程。 现在没有时间给你一些示例代码,但在大约10个小时内大声喊叫,我会看看我能做些什么。
这不属于SO,因为它是通用的,而不是语言特定的问题。
简短的回答是不容易的。 也就是说,它不能从你的shell或者procfs / sysfs的function中完成。 您将需要使用外部实用程序来实现它。
这里有一个很长的描述如何和为什么。 当心这是相当C – 中心。
更新:
他们是改变游戏的python。 现在不用太过分了,修改它们来使用这个模块或类似的方法可能会更容易。
看看https://github.com/electrum/procname 。 它允许您使用环境variables设置任何进程的进程名称。
用法:
使用LD_PRELOAD和PROCNAME环境variables集运行Java:
LD_PRELOAD = / path / to / libprocname.so PROCNAME = hello java -jar foo.jar