cat застрял в определенном файле

Вы можете сделать что-то вроде этого (непроверено, будет работать только в 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

Но это только технически все еще сценарий оболочки. :)

Он также не будет работать правильно, если после его запуска будут подключены дополнительные устройства ввода (он будет игнорировать ввод на них).

3
05.11.2018, 04:05
1 ответ

Скорее всего, это mmap'ирует каждый файл, который он может проиндексировать. Я видел подобное с Kafka, отображающим тысячи файлов, но обычно виртуальный след намного выше (~10x )раз ). Вы можете бежать:

cat /proc/{PID}/maps

(, где {PID} — идентификатор вашего процесса Eclipse ), чтобы проверить, так ли это. Если это действительно так, вам, возможно, придется поднять vm.max_map_countв sysctl, если ваш виртуальный след слишком велик.

6
27.01.2020, 21:17

Теги

Похожие вопросы