当我的应用程序使用太多内存或系统内存不足时,我想从linux系统收到通知。我做了一些搜索,一些解决方案需要修补内核并观察文件,如/ dev / MEM-通知。 是否有标准系统信号发送到应用程序?我正在使用GTK2.0,有没有GTK方法来解决这个问题?
答案 0 :(得分:1)
一种方法是运行查找内存不足情况的脚本并提醒您。本文有几个不错的脚本:https://askubuntu.com/questions/234292/warning-when-available-ram-approaches-zero
该文章中的代码需要针对您使用的任何Linux风格进行修改(它假设是桌面ubuntu),但它是一个有用的起点:
#!/bin/bash
#Minimum available memory limit, MB
THRESHOLD=400
#Check time interval, sec
INTERVAL=30
while :
do
free=$(free -m|awk '/^Mem:/{print $4}')
buffers=$(free -m|awk '/^Mem:/{print $6}')
cached=$(free -m|awk '/^Mem:/{print $7}')
available=$(free -m | awk '/^-\/+/{print $4}')
message="Free $free""MB"", buffers $buffers""MB"", cached $cached""MB"", available $available""MB"""
if [ $available -lt $THRESHOLD ]
then
### MODIFY THIS NOTIFICATION METHOD FOR YOUR OS
notify-send "Memory is running out!" "$message"
fi
echo $message
sleep $INTERVAL
done
答案 1 :(得分:1)
最近的内核不再发送SIGTERM了。只有SIGKILL被发送到该进程。因此,无法从内核接收触发器。
答案 2 :(得分:0)
也许这会有所帮助:https://www.kernel.org/doc/gorman/html/understand/understand016.html
13.4杀死所选程序
选择任务后,将再次遍历列表和每个进程 与所选进程共享相同的mm_struct(即它们是 线程)发送一个信号。如果进程有CAP_SYS_RAWIO 功能,SIGTERM被发送给进程一个机会 干净利落地退出,否则发送SIGKILL。
可以挂钩SIGTERM而不是SIGKILL。无论如何,如果OOM杀手正在运行,你就会遇到更大的问题。
或许也许您可以自我监控应用程序的内存密集度,如果它太高则退出。