5

我想知道如何使用 Qt做这样的事情(源代码)。我查看了文档,但找不到任何方法来检查外部进程是否正在运行。

if [ "$(pidof ksmserver)" ]; then
   echo "KDE running."
   # KDE-specific stuff here
elif [ "$(pidof gnome-session)" ]; then
   echo "GNOME running."
   # GNOME-specific stuff here
elif [ "$(pidof xfce-mcs-manage)" ]; then
   echo "Xfce running."
   # Xfce-specific stuff here
fi
4

3 回答 3

8

通常你不应该这样做。通常,如果您的应用程序的行为因桌面环境而异,那么对于在它们之间切换的任何用户来说,这将是一个令人讨厌的惊喜。

替代方案

使用与 DE 无关的命令,例如xdg-open. 好处:

  • 您不必自己编写逻辑(xdg-utils 已经这样做了)
  • 更人性化。它遵循用户的实际喜好;许多用户使用一个 DE,但更喜欢来自不同 DE 的某些应用程序。
  • 支持其他 DE,如 XFCE、LXDE、Unity 等。

例如,不是根据当前运行的 DE 在 Firefox 或 Konqueror 中打开 URL,而是将 URL 传递给以xdg-open在用户的​​首选应用程序中打开它。(用户可能是 Chromium 用户。)不要对 GNOME 和 KDE 进行硬编码nautilusdolphin而是使用xdg-open.

同样,对于与 DE 的其他交互形式,尝试使用Freedesktop 规范,而不是试图猜测 DE 正在运行什么。存在用于将文件移动到垃圾箱、添加系统托盘小程序以及将文件添加到“最近使用的文件”列表等的标准。

于 2012-09-19T09:48:22.757 回答
2

使用 QProcess 运行pidof foo,然后检查它的标准输出?如果这不是您想要的,请搜索/proc/

于 2010-08-10T11:53:59.597 回答
1

我相信 pidof 所做的正确方法是查看 /proc 中的条目。这里还有另一个线程:Find PID of a Process by Name without Using popen() or system()

于 2010-07-31T03:59:33.703 回答