系统相关
首页 > 系统相关> > 如何持续监控Linux中的进程创建?

如何持续监控Linux中的进程创建?

作者:互联网

我的流程启动了一个流程-在此示例中将其作为外壳,但实际上它适用于任何流程.当Shell创建新进程并获取其PID时,我需要得到通知.

我可以在任何给定时间拍摄整个流程树的快照(好吧,pstree可以),但是如何监视具有给定PID的流程对新流程的创建?

到目前为止,我已经找到了几种方法可以在How to monitor an external process for events by its PID in C?做到这一点,但没有一种能真正解决我的问题:

>监视NetLink proc接口.问题:需要我没有的root权限.
>自定义库覆盖由LD_PRELOAD加载到Shell进程中的syscall.问题:shell的子代也将继承它,我不希望那样-我只想监视shell.
> ptrace()修改外壳.问题:通知父级(即我的进程)有关创建新进程(即PTRACE_O_TRACEFORK,PTRACE_O_TRACEVFORK和PTRACE_O_TRACECLONE)的标志会将ptrace()传播到子进程,而我只想监视外壳程序.
>使外壳配合.问题:在BASH命令中,回调(如undistract-me中所使用)非常hacky.我也希望避免使用特定于shell的代码.

我觉得这里缺少一些简单的东西.我觉得我可以使上述解决方案之一与更多的黑客一起使用,但是…当然,对于这样一个简单的任务,我不必求助于LD_PRELOAD和ptrace()之类的大手笔,对吗?

JFYI我正在用Vala编写代码,但是也欢迎使用C代码片段.

解决方法:

到目前为止,还没有找到通用的解决方案,因此我不得不诉诸于shell的配合:

> ZSH的前执行钩子记录在
http://zsh.sourceforge.net/Doc/Release/Functions.html
> KSH有一个
调试挂钩记录在http://www.manpagez.com/man/1/ksh/
>可以在以下位置找到将pre-exec添加到BASH的黑客
https://github.com/jml/undistract-me

我只是根据外壳将回调命令写入相关的环境变量中.

标签:vala,monitoring,c-3,linux,process
来源: https://codeday.me/bug/20191121/2055541.html