【发布时间】:2017-04-08 05:44:23
【问题描述】:
我想编写一个 Bash 脚本来“监视”某个应用程序。一旦尝试关闭/终止此应用程序,脚本将尝试停止该终止操作几毫秒,执行一些操作,然后终止应用程序。
我正在使用 Okular 阅读 PDF 文件并对其进行注释。但是注释只保存在 Okular 的文档数据中。但是,如果您使用“另存为”保存文件,则注释将保存在 PDF 文件本身中。
我要做的是拦截用户通过单击窗口上的“x”按钮关闭 Okular 的尝试,并“另存为”okular 文件,替换原始文件,然后关闭应用程序。
这是一种将注释保存在 PDF 文件中的肮脏技巧,因为任何好的 PDF“阅读器”在 Linux 中都没有提供此功能(请不要命名 libreoffice 或 gimp,它们不是阅读器)。
【问题讨论】:
-
如果你
kill -KILL被监视的应用程序将无法工作....(这是一件坏事,kill -TERM更可取) -
使用signal handlers,在内部主应用程序进程中可以实现与此完全不同的事情。如果您准备使用调试器 API (
ptrace) 编写大量可怕的低级 C,您也可以通过外部看门狗程序来完成。从外部 bash 脚本?!算了。 -
更具体地说明您要做什么。如果可以的话,包括有问题的实际程序,并举例说明你试图拦截什么样的“尝试关闭/终止”。我认为这个问题已经被剥夺了所有有用的背景信息。
-
你真的应该解释什么是目标应用程序,以及为什么确切地你想这样做;。 (听起来像XY problem)
-
即使 ptrace() 也不会让您在收到 SIGKILL 后立即阻止进程被杀死,这是操作系统具有的最基本的保护形式之一,它用于您的程序的行为非常糟糕,试图避免整个系统崩溃,