如何为要从 shell 脚本触发的进程设置进程名称?
例如,如果我要从一个 shell 脚本执行一个 java 类文件,java <classname>
我需要Java_Process_1
在我执行的时候看到该 java 进程ps ax
。
尝试exec -a Java_Process_1 java <classname>
如果您使用的是 bash,则应该接受 hwatkins 的回答。否则,您可以使用专门为此目的制作的几个小程序之一,例如来自http://cr.yp.to/ucspi-tcp.html的 argv0 ,runit 的 chpst ( http://smarden.org/runit/chpst.8 .html ) 等
假设您需要 Java 进程,您可以利用 JVM 的属性特性并为您的进程创建一个标签(如果它愿意,程序本身也可以看到):
java -Dmy.appid=Java_Process_1 <classname>
但一般来说,ps
它将读取/proc/$pid/cmdline
它打印的命令行的值,并且该值将是命令的确切参数向量的值,以空字符分隔。这意味着像“Java_Process_1”这样的自定义字符串将采取某种形式的非标准技巧。
另一种方法是使用您的应用程序名称创建指向您的 java 的符号链接。ps 将使用符号链接的名称。
ln -s Java_Process_1 /usr/bin/java
然后开始你的应用程序
Java_Process_1 -jar ......
你不能。一个进程需要存在才能修改它的 argv[0]。