当指定的进程终止时,是否可以通过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/
来获取运行的实际命令的更多详细信息,您将在其中使用实际的PID而不是cmdline
。 -
如果没有打开涉及Firefox的进程,则会立即通知您,并打开Zenity关闭窗口,询问您是否确实要关闭。
一旦您满意,您可以设置键盘快捷键以启动fx-check-n-shutdown
而不必通过终端运行它。 如何设置快捷方式取决于您的Ubuntu的特殊风格。 对于Ubuntu 14.04,说明如下: https : //help.ubuntu.com/14.04/ubuntu-help/keyboard-shortcuts-set.html