【问题标题】:Capture executed commands from programs从程序中捕获执行的命令
【发布时间】:2015-06-03 04:23:07
【问题描述】:

有没有办法捕获 GUI 程序执行的命令? 甚至是简单的 bash 脚本? 类似于 bash 中的“历史”命令,但在整个系统上都可用。

【问题讨论】:

  • 您可以使用 strace 获取特定程序执行的系统调用。

标签: linux bash strace


【解决方案1】:

shell(例如 bash)具有 -x 选项,您可以看到由特定脚本执行的所有命令。运行sh -x <your_script 并查看输出。您还可以通过在脚本中发出 set +xset -x 来临时打开/关闭此日志记录。

关于 GUI 程序,答案取决于您的需求以及您想要记录的活动类型。您可以按照 cmets 中的建议使用 strace,并过滤掉 exec* 呼叫。但您可能会假设其他情况,因为 GUI 程序的大多数活动都是在不执行外部程序的情况下执行的。

【讨论】:

  • 例如:我使用带有“最小化所有窗口”按钮的 lxpanel。当我单击它时,我想捕获它执行的命令。 (我使用“sudo strace -p 2248 -f 2>&1 | nl”)来跟踪 lxpanel 进程(PID 2248)和子进程?!但我没有任何执行官,只是那种东西:
  • 也许 lxpanel 没有启动 exec,有什么方法可以跟踪“init”或每个进程? "sudo strace -f -p 1" 不成功
  • 嗯。任何被正确提出的问题几乎都会立即得到答案。在 X Window System 中管理窗口是通过发送适当的消息(通常通过 X11 C API)来执行的,这就是您看到这些系统调用的原因。您可以使用ltrace 来跟踪library 调用,但最好只查看简单的示例和来源。看看wmctrl,它本质上是一个从命令行管理窗口的工具,除了处理命令行参数等常规应用程序之外,哪些来源 (main.c) 适合纯 X11 调用
猜你喜欢
  • 1970-01-01
  • 2019-11-09
  • 2010-10-29
  • 2011-08-08
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多