diff options
author | We-unite <3205135446@qq.com> | 2024-07-22 11:41:59 +0800 |
---|---|---|
committer | We-unite <3205135446@qq.com> | 2024-07-22 19:36:34 +0800 |
commit | cf5618ff2e2a183c5bdf6444787dccdcbf26ce76 (patch) | |
tree | 6cc173b9bffe2c1414887a338b6dc2bdbd594fd1 /src/global.go | |
parent | 7cf8e470471d30fc821a8be350dcb97dc64e5add (diff) | |
download | godo-cf5618ff2e2a183c5bdf6444787dccdcbf26ce76.tar.gz godo-cf5618ff2e2a183c5bdf6444787dccdcbf26ce76.zip |
Use mongodb, insert process info into it
I failed to print the process tree out. While I'm printing the tree,
the tree itself gets changed, maybe deleted. What's more, the output
show that there are 4 lines with the same ppid and pid, how an absurd
result! It may be caused by multi-thread. So, use database instead.
Mongodb uses bson(binary json) to store data but not relational
database like mysql, which means it's more easy to use.(?)
Beside inserting, I've also solved a question that "fork" is called
once but returns twice. For instance, pid 1 forked pid 2, in the
audit log it's not an event "syscall=clone,ppid=1,pid=2", but actually
two events "syscall=clone,exit=0,ppid=0,pid=1" and "syscall=clone,exit=
2,ppid=0,pid=1", which is just what we see in sys_fork in kernel source.
To deal with this, when syscall is clone and exit is 0 we just drop it.
Left question: To find out the exit code when a process exit/exit_group,
and finish the code to record it in the database.
Diffstat (limited to 'src/global.go')
-rw-r--r-- | src/global.go | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/global.go b/src/global.go index 4e08866..0439df6 100644 --- a/src/global.go +++ b/src/global.go | |||
@@ -1,6 +1,27 @@ | |||
1 | package main | 1 | package main |
2 | 2 | ||
3 | import "sync" | 3 | import ( |
4 | "sync" | ||
5 | "time" | ||
6 | ) | ||
7 | |||
8 | type Event struct { | ||
9 | timestamp time.Time | ||
10 | pid, ppid int | ||
11 | syscall int | ||
12 | argc int | ||
13 | argv []string | ||
14 | cwd string | ||
15 | } | ||
16 | |||
17 | type process struct { | ||
18 | timestamp time.Time | ||
19 | pid, ppid int | ||
20 | argv []string | ||
21 | cwd string | ||
22 | rootfs string | ||
23 | children []int | ||
24 | } | ||
4 | 25 | ||
5 | var pids sync.Map // 古希腊掌管进程的神,int->*process | 26 | var pids sync.Map // 古希腊掌管进程的神,int->*process |
6 | var wg sync.WaitGroup // 掌管协程 | 27 | var wg sync.WaitGroup // 掌管协程 |