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。这个系统调用在多线程程序中非常有用,因为它确保所有线程都能同时退出。

 

posted @ 2024-05-21 16:08  zzl14  阅读(254)  评论(0)    收藏  举报