据我了解,SEGV
操作系统会发送一个信号来通知进程它已尝试进行非法内存访问。但我注意到也可以SEGV
从另一个进程(例如kill -s SEGV pid
)向一个进程发送信号。
因此我想知道,能够向SEGV
另一个进程发送信号有什么用?
此外,是否有一个进程知道SEGV
信号是由操作系统还是由另一个进程发送的?
据我了解,SEGV
操作系统会发送一个信号来通知进程它已尝试进行非法内存访问。但我注意到也可以SEGV
从另一个进程(例如kill -s SEGV pid
)向一个进程发送信号。
因此我想知道,能够向SEGV
另一个进程发送信号有什么用?
此外,是否有一个进程知道SEGV
信号是由操作系统还是由另一个进程发送的?
我想有人可以手动发送它进行测试。但是即使最初没有想到它的用途,我们也不知道是否有人会想出一个用途,然后任意限制就会成为阻碍。
是的,正如Catch which user sent kill signal
sigaction()
中提到的,使用标志设置的信号处理程序可以从结构SA_SIGINFO
中读取许多细节。siginfo_t
这些包含发送信号的原因 (si_code
),如果适用,则包含发送用户和 PID (si_uid
,si_pid
)。请参阅手册页:https ://man7.org/linux/man-pages/man2/sigaction.2.html
这是一个简单的测试程序,它为 SIGSEGV 设置一个处理程序并将其发送给自己,首先使用
kill()
然后触发无效的内存访问:我的系统上的输出是:
(请注意,某些不适用于相关案例的字段包含垃圾。)
Unix 对可以发送给进程的信号没有任何限制。它仅根据进程所有权限制信号。
一般来说,没有办法确定信号的来源。