【问题标题】:How to wait for a program termination signal/attempt, and stop it from termination? [closed]如何等待程序终止信号/尝试,并阻止它终止? [关闭]
【发布时间】: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 后立即阻止进程被杀死,这是操作系统具有的最基本的保护形式之一,它用于您的程序的行为非常糟糕,试图避免整个系统崩溃,

标签: linux bash okular


【解决方案1】:

如果应用程序被-9 杀死,无论是在应用程序内部还是从外部,您都无能为力。

您能做的最好的事情就是编写一个脚本,用户可以调用该脚本来终止应用程序。该脚本将负责通知应用程序即将终止(通过某种 IPC 机制),等待确认可以继续,然后终止应用程序。

【讨论】:

  • NB -9SIGKILL(见 signal(7) ...),我在评论中提到了 kill -KILL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
  • 2021-05-18
  • 2010-11-11
相关资源
最近更新 更多