exit&&exitgroup系统调用
日志
exit
type=SYSCALL msg=audit(1716278384.251:15840): arch=c000003e syscall=60 a0=0 a1=3b000 a2=3c a3=200 items=0 ppid=1514 pid=153800 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=(none) ses=3 comm="SandboxReporter" exe="/usr/lib/firefox/firefox" subj=unconfined key="my_syscall_watch"ARCH=x86_64 SYSCALL=exit AUID="randy" UID="randy" GID="randy" EUID="randy" SUID="randy" FSUID="randy" EGID="randy" SGID="randy" FSGID="randy" type=PROCTITLE msg=audit(1716278384.251:15840): proctitle=2F7573722F6C69622F66697265666F782F66697265666F78002D6E65772D77696E646F77
exit_group
type=SYSCALL msg=audit(1716278014.062:15746): arch=c000003e syscall=231 a0=0 a1=e7 a2=3c a3=77 items=0 ppid=153475 pid=153476 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=3 comm="syscall" exe="/home/randy/work_for_corrosion/syscall_log_test/syscall" subj=unconfined key="my_syscall_watch"ARCH=x86_64 SYSCALL=exit_group AUID="randy" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root" type=PROCTITLE msg=audit(1716278014.062:15746): proctitle="./syscall"
分析
exit终止自己,exit_group终止整个线程组。
因此可能需要构建 边
WasTriggeredBy(processVertex, processVertex)
另外,exit后应该清除此进程的所有状态。
系统调用原型
exit 系统调用:
void _exit(int status);
- 参数:
status是一个整数,表示进程的退出状态。 - 返回值:由于
exit系统调用不会返回到调用者,因此没有返回值。
在实际实现中,exit 系统调用是通过 _exit 或 _Exit 函数实现的。它的功能是终止调用它的线程并返回状态码 status。与普通的 exit 函数不同,_exit 不会执行标准库中的清理函数或刷新缓冲区等操作
exit_group 系统调用:
void syscall(SYS_exit_group, int status);
- 参数:
status是一个整数,表示整个线程组的退出状态。 - 返回值:与
exit系统调用类似,由于exit_group系统调用终止整个线程组,因此它不会返回到调用者。
exit_group 是 Linux 特有的系统调用,用于终止整个线程组(即进程中的所有线程),并返回状态码 status。这个系统调用在多线程程序中非常有用,因为它确保所有线程都能同时退出。

浙公网安备 33010602011771号