【发布时间】:2016-11-08 12:02:15
【问题描述】:
我在 Linux 上,我有一个 Java 应用程序(JAR 存档),它使用 exec() 来完成它的工作。我需要找出应用程序 exec()uting 是哪些命令...我尝试了 strace 和 jstack 但没有任何结果。假设应用程序正在调用 exec("ls"),我可以通过 grepping 上述程序的输出找到该 ls 命令吗?
所以问题是: 有没有一种简单的方法来观察 Java 应用程序使用 exec() 执行了什么?
编辑以获得更好的情况概述:
假设在 Java 应用程序中,我有一个带有 onclick 侦听器的按钮,该按钮从另一个类调用静态函数。在该函数中调用了 exec("ls");。
当我单击该按钮时,我会在 strace 中看到:
futex(0x7f14a6f799d0, FUTEX_WAIT, 4968, NULLDownload button clicked !
Trying SCP FROM...
<unfinished ...>
在调用 exec() 之前尝试 SCP FROM.. 只是我对该按钮处理程序的不满。
另一个编辑:
谢谢你们,但我是从操作系统的角度说的......假设我是系统管理员并且我下载了 JAR。我想(从外部)知道那个 JAR 在做什么 - 我只对从 exec() 开始的程序感兴趣
所以我尝试了strace,但它没有显示任何关于从 exec 调用该命令...也许它为此记录了太多低级调用...
然后我尝试了jstack -m,但我找不到任何看起来像来自 exec 的命令的东西。我试过 grepping 字符串但没有运气。
【问题讨论】:
-
ls进程是否应该将 Java 进程作为其父进程,例如查看ps等的输出时? -
@Thomas:但是这个进程只会存活几毫秒。
-
嗯,好主意...但只有当我在 ls 命令执行时及时运行
ps时才会显示。我会更喜欢日志或跟踪之类的东西...... -
它必须出现在
strace,对吧? -
@Thilo 拜托,你能看看我更新的问题吗?我在 strace 中看到的唯一东西是