Черпая вдохновение из:https://stackoverflow.com/questions/15430877/bash-xargs-passing-variable
Даже если это немного -притянуто за уши, это работает:
echo "0x1a" | xargs sh -c 'perl -le "print hex(\"$1\");"' sh
26
В моей Ubuntu 20.04 ограничение для nofile
составляет (2^20):
* hard nofile 1048576
Как ни странно, если я добавлю 1, число упадет до 524288 (2^19 ).
Это ограничение для каждого процесса. Общий лимит для всех процессов 2^63 -1:
$ cat /proc/sys/fs/file-max
9223372036854775807
Количество открытых в данный момент файлов — это первый столбец:
$ cat /proc/sys/fs/file-nr
74144 0 9223372036854775807
На моем сервере я запустил:
ulimit -n 1048576
open_files() { perl -E 'for(1..'$1') { open($f{$_},"<","/dev/null") || die $_;} say "Done"; sleep 10000'; }
export -f open_files
seq 20000 | time parallel --nice 10 -uj0 open_files 30000
Запускается без проблем и открывает 600 М файлов:
$ cat /proc/sys/fs/file-nr
600320672 0 9223372036854775807
Таким образом, практический предел явно выше.