当指定的进程终止时,是否可以通过NotifyOSD进行通知?

我必须承认是一个沉重的Firefox用户,所以当我终止FF时,我总是要检查系统监视器是否在关闭Ubuntu之前它的进程真正终止。 否则,由于Ubuntu在关机期间强制终止FF,我将在下一个会话中获得“恢复会话屏幕”。

那么我就有了监控FF的想法,当终止进程向NotifyOSD发送命令时,通知我FF已关闭,关闭Ubuntu是安全的。

由于我是Ubuntu的新手,我不知道如何做到这一点,或者即使有可能……任何建议从哪里开始?

最好的问候和提前感谢! Ruessel

PS:我运行Ubuntu 14.04 LTS

有可能这样做。 可以编写一个包装脚本,它将启动一个进程并捕获其PID并监视该PID。 例如,我写了一个小脚本,如果像monitor_process.sh firefox一样调用monitor_process.sh firefox将启动firefox并等到它退出。

 #!/bin/bash nohup $@ &> /dev/null & PID=$! while ps --no-headers -p $PID > /dev/null do echo $PID : # no-op sleep 0.25 done notify-send "$@ exited" 

当然可能有多个firefox实例,所以我们希望有一些类似于monitor_process.sh firefox ,它会监视所有的firefox窗口,直到它们全部退出。

 #!/bin/bash SELF=$$ while pgrep -f firefox | grep -v $SELF > /dev/null do : # no-op sleep 0.25 done notify-send "$@ exited" 

我上面的方法是通过获取包含“firefox”字符串的所有进程的PID,但忽略脚本的PID(因为monitor_process.sh firefox将包含在列表中,我们不希望那个 – 如果它经常监视自己,脚本就不会退出)。

当然,脚本一旦发出通知就会退出,如果你退出后重新打开一个窗口,可能需要重启,所以将nohup $@ &> /dev/null &到第二行可能更容易。脚本并将其用作启动器和监视器。

或者,我们可以添加一个外部while循环来监视firefox是否正在运行,并且仅在其运行时才开始监视; 如果不是 – 开始监控。

 #!/bin/bash start_monitoring() { while pgrep -f "$@" | grep -v $SELF &> /dev/null do : # no-op sleep 0.25 done notify-send "$@ exited" } main() { local SELF=$$ while true do pgrep -f "$@" | grep -v $SELF > /dev/null [ $? -eq 0 ] && start_monitoring "$@" sleep 0.25 done } main "$@" 

上面的代码将适用于firefox的多个实例以及多个关闭和重新打开,因此您可以在会话期间关闭firefox,它将通知您,并一直等到新的显示,并将开始监视。

这对我有用……

如果此类文件夹尚不存在,请在主目录中创建名为bin的文件夹。

使用以下内容在~/bin创建纯文本文件:

 #!/bin/bash if pgrep firefox then notify-send --urgency=critical "Is Firefox still running?" else notify-send "No Firefox process is running" zenity --question --text="Proceed to shutdown?" if [ $? = 0 ]; then dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop else exit fi fi 

保存为fx-check-n-shutdown 。 不需要任何后缀。

然后,在文件管理器中右键单击fx-check-n-shutdown 。 选择“ Properties并为您生成“可执行”文件。

从软件中心sudo apt-get install libnotify-bin在终端中运行sudo apt-get install libnotify-bin

完成后,在终端中键入fx-check-n-shutdown并按enter 。 您应该看到一条通知,询问您“Firefox是否仍在运行?” 或者说“没有Firefox进程正在运行”。

没有运行Firefox进程的后一种情况下,通知将很快消失(假设您的鼠标指针不在通知占用的区域上)。

您还会看到一个小窗口,询问您是否要关机。

如果Firefox仍在运行,您需要通过单击通知自行关闭通知,然后您可以确保已彻底关闭Firefox。

你所做的就是创建一个名为fx-check-n-shutdown的脚本。
你已经让它可执行了。
你已经安装了libnotify-bin程序,允许普通用户自己发出通知。

脚本的作用:

  • 它检查是否有任何进程中带有“firefox”的进程正在运行。

  • 如果Firefox进程正在运行,则会通知您。 然后,您可以打开一个终端,并运行pgrep firefox以获取进程的ID(PID),并使用该PID通过运行cat /proc/cmdline来获取运行的实际命令的更多详细信息,您将在其中使用实际的PID而不是

  • 如果没有打开涉及Firefox的进程,则会立即通知您,并打开Zenity关闭窗口,询问您是否确实要关闭。

一旦您满意,您可以设置键盘快捷键以启动fx-check-n-shutdown而不必通过终端运行它。 如何设置快捷方式取决于您的Ubuntu的特殊风格。 对于Ubuntu 14.04,说明如下: https : //help.ubuntu.com/14.04/ubuntu-help/keyboard-shortcuts-set.html