检查特定 Linux 终端是否已打开

Check if a specific Linux Terminal is already open

我们有一个服务器启动脚本,它调用 Mate 终端(或 GNOME 终端 - 应该不会有什么区别)作为服务器启动过程的一部分,本质上就是像这样跟踪服务器信息日志:

mate-terminal --title="APPSERVER LOG" --working-directory=$SERVER_LOCATION --hide-menubar -e "sh -c 'tail -f --retry -n 400 ./server.log'" &

现在正如您想象的那样,在开发一个终端时,由于多次服务器重新启动,最终会出现相当多的打开终端,所有终端都跟踪相同的日志文件。

现在我的问题是:是否可以以某种方式检查打开的终端是否有特定的 运行 命令、特定的标题或类似的命令,以便仅在没有尾部的情况下打开一个新终端?

我查看了 mate-terminal 的手册页,但找不到任何可以执行 Window 管理的内容。

我们是 运行 CentOS7 和 MATE 1.12.1

cat /etc/*release
CentOS Linux release 7.2.1511 (Core) 

你可以尝试像这样 grep pid of mate:

pgrep -d " " -f path/to/mate/terminal/binary

然后你决定是否有必要打开另一个,杀死现有的,或者任何你想要的:)

它的价值:基于@kitz 的回答我现在结束了不使用 pgrep 来获取进程 ID 并且不打开新的尾部 window,而是使用 pkill 关闭现有的并再次尾巴。原因是,日志文件可能同时被删除了,所以即使--retry只对初始打开有效,原始尾巴也可能丢失了日志。

就是这样:

TAILCMD="tail -f --retry -n 400 ./server.log"
pkill -ef "$TAILCMD"
mate-terminal --title="Server Log" --working-directory=$SERVER_LOCATION --hide-menubar -e "sh -c '${TAILCMD}'" &

再次感谢@kitz 为我指明了正确的方向!