如何为多个后台进程设置标识符?

如何为多个后台进程设置标识符?

我正在创建一个自定义游戏服务器,并且有一个 .jar 文件来运行它。我需要在单个虚拟机(例如 15 个)上启动多个游戏服务器。我发现我可以像这样运行它们:

java -jar server-1.0.jar &

但当我打字时ps,我只看到PID, CMD,TTYTIME。我如何识别哪个是服务器 6、哪个是服务器 9 等等?我应该用什么?

答案1

pid您可以在启动后台作业后立即记下它:

command & pid1=$!
command & pid2=$!

$!是最后启动的后台作业的 pid。

使用通过脚本或程序中进程的属性搜索 pid 的工具是不明智的。

进程应该始终跟踪其子进程。如果您沿着ps/ ... 路线走下去pgrep,您就有杀死(=发出信号)无辜受害者(=不属于您自己但意外匹配您的查询的进程)的风险。


如果您瞄准正确的 pid,但这些 pid 不是您的孩子,您也会面临这种风险。一个pid槽会被保留,直到进程死亡并且其父进程wait在其上(只有父进程可以wait在进程上)。如果 a不是您的,则它可能已经死亡并在您获悉 a 的时间和您发出信号的时间pid之间等待。pid那么你可能会瞄准无辜的受害者(竞争条件)。

答案2

例如使用-f开关来ps显示更多信息。看man ps

-f 进行完整格式的列表。此选项可以与许多其他 UNIX 样式选项结合使用以添加其他列。这也导致了 要打印的命令参数。与 一起使用时-L,将添加 NLWP(线程数)和 LWP(线程 ID)列。请参阅c 选项、格式关键字 args 和格式关键字 comm。

相关内容