有没有办法检测一个名为 exec 的进程?

有没有办法检测一个名为 exec 的进程?

我对以编程方式监视进程的状态感兴趣(这不是我自己的进程,也不是我自己进程的子进程)。每当给定的进程exec(或其变体之一)发生时,是否有一个递增的计数器或一个发生变化的标识符等?我已经检查了sysctl、等标题libproc.h,但我找不到任何类似的内容。

显然PID不会改变,但是可执行路径、参数、环境变量可能改变。我可以轮询这些值,并检测它们的变化。任何更改都表明exec发生了变化,但也有可能(尽管奇怪)进程可以exec使用相同的可执行文件、args 和 env 进行调用,这不会引发我的警报。

我最终对达尔文所做的事情感兴趣,但我很想听听任何*尼克斯中可能存在的任何类似机制。这至少会给我一个进一步研究的起点

答案1

根据您的操作系统,您可能应该使用:

strace # on linux. you can attach to a pid (if you (as root?) have the rights to do so)
# you can also "follow its children" (using the appropriate options : `man strace` )

其他 UNIX 上也存在等效的(具有不同功能)(并且也可能安装在您的操作系统上):

dtrace # bsd originated, I believe. Should be present also on macos?

dtruss # on macos

truss # on aix

ETC。

对于每个:您将需要找到做您想做的事情所需的适当论据。 (例如,通常默认值会隐藏丢失的内容,并将系统调用参数截断为仅前几个字符等:所有这些都可以通过选项进行更改)

看看它是否在 stderr 上输出内容(可能)。并将其包装在一个脚本中,该脚本根据您需要它执行的操作进行操作。 (例如: 2>/some/tracefile # 并有另一个脚本 tail -f /some/tracefile 并在看到这个或那个系统调用出现时采取行动。)

相关内容