Process-Watcher 项目教程
1. 项目的目录结构及介绍
process-watcher/
├── app
│ ├── main.go
│ └── ...
├── .gitignore
├── LICENSE
├── README.md
├── go.mod
├── go.sum
├── process_watcher.go
├── types.go
└── ...
- app: 包含项目的主要应用程序文件。
- .gitignore: 指定Git版本控制系统忽略的文件和目录。
- LICENSE: 项目的许可证文件,本项目使用Apache-2.0许可证。
- README.md: 项目的基本介绍和使用说明。
- go.mod: Go模块文件,定义项目的依赖关系。
- go.sum: 包含所有依赖项的校验和,确保依赖项的完整性。
- process_watcher.go: 核心文件,实现进程监视功能。
- types.go: 定义项目中使用的数据类型。
2. 项目的启动文件介绍
项目的启动文件位于app
目录下的main.go
。该文件负责初始化和启动进程监视器。以下是main.go
的基本结构:
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
processwatcher "github.com/arlowhite/process-watcher"
)
func main() {
w := processwatcher.NewProcessWatcher()
if err := w.Start(); err != nil {
panic(err)
}
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
for {
select {
case e := <-w.Events():
if e.Err != nil {
panic(e.Err)
}
typ := "not-support"
var obj interface{}
switch e.GetType() {
case processwatcher.PROC_EVENT_EXEC:
typ = "exec"
obj = e.GetExec()
case processwatcher.PROC_EVENT_FORK:
typ = "fork"
obj = e.GetFork()
case processwatcher.PROC_EVENT_EXIT:
typ = "exit"
obj = e.GetExit()
}
fmt.Printf("%s: %+v\n", typ, obj)
case <-sigs:
return
}
}
}
3. 项目的配置文件介绍
项目没有显式的配置文件,但可以通过命令行参数进行配置。以下是一些常用的命令行参数:
- --pid: 指定要监视的进程ID。
- --command: 指定要监视的进程命令。
- --notify: 发送桌面通知。
- --watch-new: 持续监视新进程。
例如,要监视进程ID为1234的进程并发送邮件通知,可以使用以下命令:
process_watcher --pid 1234 --to me@gmail.com
要监视所有myapp
进程并持续监视新进程,可以使用以下命令:
process_watcher --command myapp --notify --watch-new
通过这些命令行参数,可以灵活地配置和使用process-watcher
项目。