启动和关闭基于其他应用程序的应用程序

启动和关闭基于其他应用程序的应用程序

我正在使用 Ubuntu 20.04,我正在寻找一个 bash 脚本来同时启动 Quodlibet(音乐应用程序)和 conky。编辑:这个想法是在 .desktop 启动器中使用 sh 脚本

  1. 开始Quodlibet
  2. 2秒后启动conky
  3. 如果 Quodlibet 关闭,则关闭 conky

我做了一些测试,但我相信下面的脚本不会工作,因为我没有注意到 Quodlibet 的结束。当我关闭 Quodlibet 时,Conky 仍在运行。

#!/bin/bash
trap "exit" INT TERM ERR
trap "kill 0" EXIT

quodlibet &
sleep 2 &&
conky &

wait

编辑:独立的.sh解决方案

工作脚本,感谢@berndbausch。

#!/bin/bash
quodlibet & QUODPID=$!
sleep 3 &&
conky & CONKYPID=$!

wait $QUODPID
kill $CONKYPID

编辑:使用自定义启动器

正如 @xhienne 在他的回答中所解释的,exec=setsid /path/to/script.sh在 .desktop 文件以及他的脚本中使用效果很好。

答案1

只需在当前 shell 中启动 Quodlibet,而不是在子进程中:

#!/bin/bash
trap "exit" INT TERM ERR
trap "kill 0" EXIT

(sleep 2 && conky) &

quodlibet

[更新] 您提到您想.desktop在图形环境中从文件运行此脚本。 @fra-san 让我意识到,以这种方式运行的每个进程都可能继承其父进程的进程组,因此,kill 0将杀死该启动器进程以及(可能)它已启动的所有进程。这当然不是你想要的。

解决方案是启动脚本,setsid以便创建一个专用于它的新进程组:

setsid /path/to/script.sh

相关内容