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

Gin*_*as_ 2 linux process ps background-process

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

java -jar server-1.0.jar &
Run Code Online (Sandbox Code Playgroud)

但是当我输入时ps,我只看到PID, CMD,TTYTIME。我如何确定哪个是服务器 6,哪个是服务器 9 等等?我应该使用什么?

PSk*_*cik 5

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

command & pid1=$!
command & pid2=$!
Run Code Online (Sandbox Code Playgroud)

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

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

进程应始终跟踪其子进程。如果你沿着ps/ pgrep... 路线走,你就有可能杀死(=信令)无辜的受害者(=不是你自己的但意外匹配你的查询的进程)。


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