Вы можете сделать что-то вроде этого (непроверено, будет работать только в Linux):
#!/bin/zsh
TIMEOUT=6000 # hundredths of seconds; in this case, 10 minutes
zmodload zsh/system
zmodload zsh/zselect
for i in /dev/input/*; do
[[ -c "$i" ]] && sysopen -r -o cloexec -u fd "$i"
dev=($dev[@] $fd)
done
while zselect -t $TIMEOUT $dev; do
sleep 5
done
# timeout occurred
shutdown -h now
Но это только технически все еще сценарий оболочки. :)
Он также не будет работать правильно, если после его запуска будут подключены дополнительные устройства ввода (он будет игнорировать ввод на них).
Скорее всего, это mmap'ирует каждый файл, который он может проиндексировать. Я видел подобное с Kafka, отображающим тысячи файлов, но обычно виртуальный след намного выше (~10x )раз ). Вы можете бежать:
cat /proc/{PID}/maps
(, где {PID} — идентификатор вашего процесса Eclipse ), чтобы проверить, так ли это. Если это действительно так, вам, возможно, придется поднять vm.max_map_count
в sysctl
, если ваш виртуальный след слишком велик.