我有一台运行着许多进程的RHEL机器。很多进程可能具有相同的启动参数,因此在top
和ps
命令中它们在这个类别上是相同的,无法互相区分。
我该如何在进程的参数中为其命名或打上标签,以便我可以从其他进程中识别出它?除了在bash中进行此操作之外,我应该如何为Java进程或screen会话执行此操作?
我有一台运行着许多进程的RHEL机器。很多进程可能具有相同的启动参数,因此在top
和ps
命令中它们在这个类别上是相同的,无法互相区分。
我该如何在进程的参数中为其命名或打上标签,以便我可以从其他进程中识别出它?除了在bash中进行此操作之外,我应该如何为Java进程或screen会话执行此操作?
这个问题的正统解决方式是使用$!
获取进程ID。这样你不会为进程打上标记,但你可以获得一个唯一标识它的ID。比如:
gedit & gedit1=$!
这会启动gedit并将进程ID保存在变量gedit1
中。如果我之后想要终止这个进程,只需要输入:
kill $gedit1
#! /bin/bash
"$@"
假设你将其命名为process-label
。您可以链接不同的名称
$ ln process-label other-label
而且您可以执行
$ process-label sleep 1800 &
$ other-label sleep 800 &
然后您将获得已标记的流程
15016 ttys002 0:00.00 /bin/bash ./process-label sleep 1800
15017 ttys002 0:00.00 sleep 1800
15021 ttys002 0:00.00 /bin/bash ./other-label sleep 800
15022 ttys002 0:00.00 sleep 800
java -Dtag=process1 -jar ....
这不仅出现在命令行上,而且还在进程内部可见,如果您需要的话。
我不知道如何通过程序参数来实现,但你可以通过硬链接(甚至符号链接)将Java链接到不同的名称,并通过该名称调用它。
例如:
在一个终端中运行以下命令:
$ cd /tmp
$ ln -s /bin/cat abc
$ ln -s /bin/cat def
$ ./abc
$ cd /tmp
$ ./def
$ ps aux | egrep 'abc\|def'
您会看到一个名为“abc”的进程和一个名为“def”的进程,两者都没有名为“cat”的进程。因此,如果您为每个进程创建不同的链接,则可以区分它们。