在Bash中如何在命令行参数中添加注释

5

我有一台运行着许多进程的RHEL机器。很多进程可能具有相同的启动参数,因此在topps命令中它们在这个类别上是相同的,无法互相区分。

我该如何在进程的参数中为其命名或打上标签,以便我可以从其他进程中识别出它?除了在bash中进行此操作之外,我应该如何为Java进程或screen会话执行此操作?

5个回答

6

这个问题的正统解决方式是使用$!获取进程ID。这样你不会为进程打上标记,但你可以获得一个唯一标识它的ID。比如:

gedit & gedit1=$!

这会启动gedit并将进程ID保存在变量gedit1中。如果我之后想要终止这个进程,只需要输入:

kill $gedit1

1
您可以创建这样的脚本。
#! /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

1
如果这是针对Java的特定情况,您可以这样传递一个未使用的系统属性:
java -Dtag=process1  -jar ....

这不仅出现在命令行上,而且还在进程内部可见,如果您需要的话。


0

我不知道如何通过程序参数来实现,但你可以通过硬链接(甚至符号链接)将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”的进程。因此,如果您为每个进程创建不同的链接,则可以区分它们。


这不仅仅是一个别名吗?它不能帮助我区分一个进程和另一个进程,对吧? - hexacyanide
@hexacyanide 这确实有帮助。当我的编辑被批准后,请查看我添加到此答案中的示例。 - dsh

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接