我可以从 SIGSEGV 处理程序中终止另一个进程吗?

标签 c linux signals segmentation-fault american-fuzzy-lop

背景:我正在使用 afl-fuzz 对一个长期存在的进程进行模糊测试,方法是将要处理的文件名从 afl-fuzz 为每个样本运行的 stub 传递给它。

当长期存在的进程通过 SIGSEGV 崩溃时,我希望 stub 也生成一个 SIGSEGV,以便 afl-fuzz 将样本标记为有趣。

从长期存在的进程的 SIGSEGV 处理程序中调用 kill(stub_pid, SIGSEGV) 会起作用吗?

最佳答案

Will calling kill(stub_pid, SIGSEGV) from the long-lived process's SIGSEGV handler work ?

如果进程在 SIGSEGV 处理程序中结束,则会发生非常糟糕的事情,其中​​可能包括完全破坏的堆栈和/或内存管理。

在这一点上不再依赖任何东西都不是一个好主意,只是进程停止了。

尝试调用超出此点的任何功能都可能失败,这是不可靠的。


一种更安全的方法是让调用进程监视其子进程,如果子进程意外终止(通常通过 SIGSEGV),则启动适当的操作。

查看 shell 脚本中的信号处理(seach-key:“trap”),因为这样的脚本可能是您要监视的进程的父进程。

关于我可以从 SIGSEGV 处理程序中终止另一个进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32889713/

相关文章:

C Void指针问题

c - 编写我自己的 SMTP 服务器

c - 查看是否通过 tcp 传递了消息

python - 使用 post_save 信号或执行 View 中的逻辑有什么区别

c - 使用信号同步

c - 错误类型 : fuzzer. c:26:25:警告:赋值从指针生成整数而不进行强制转换 [-Wint-conversion]

c - 均衡后如何避免音频样本16位削波?

linux - 在单个 Linux 命令操作系统脚本中使用某些条件重命名多个文件夹中的所有文件。

php 在 Linux 上太慢?

c - 如何捕获 SIGINT 并让它只杀死 C 中的前台进程?