我有一台运行许多进程的 RHEL 机器。许多进程可能具有等效的启动参数,因此在这一类别top
中ps
它们是相同的,无法相互识别。
我如何在其参数中命名或标记一个进程,以便我可以从另一个中识别一个?除了在 bash 中执行此操作之外,我将如何为 Java 进程或屏幕会话执行此操作?
我有一台运行许多进程的 RHEL 机器。许多进程可能具有等效的启动参数,因此在这一类别top
中ps
它们是相同的,无法相互识别。
我如何在其参数中命名或标记一个进程,以便我可以从另一个中识别一个?除了在 bash 中执行此操作之外,我将如何为 Java 进程或屏幕会话执行此操作?
执行此操作的规范方法是使用$!
. 这样您就不会标记该过程,但您有一个唯一标识它的 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 的,您可以像这样传递未使用的系统属性:
java -Dtag=process1 -jar ....
这不仅显示在命令行上,而且在进程中也可见,如果您需要的话。
如果我错了,请纠正我,但我认为你正在寻找的是别名。
见这里: http: //www.stchman.com/alias.html。
我不知道如何使用程序的参数来做到这一点,但您可以通过将 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”。因此,如果您这样做,为每个流程创建不同的链接,那么您可以区分它们。