@ulrichschwarz прав. Тесты производительности не должны запускать оба процесса в parrallel.
Вы можете использовать time
, который является ключевым словом оболочки.
На моем ящике debian также есть двоичный файл в PATH, который имеет больше возможностей. В этом случае для запуска двоичной версии необходимо использовать time
.
Явного форка не существует. Я имею в виду, что оболочка делает все за вас, когда программа запускается из командной строки или из скрипта.
Оболочка запускает программу в фоновом режиме, когда &
добавляется в конце командной строки: например, sleep 6 &
Если 2 программы запущены в фоновом режиме, они работают одновременно.
wait
— это оболочка, построенная в оболочке. При использовании без параметра текущий процесс приостанавливается в ожидании завершения активных в данный момент дочерних процессов (в фоновом режиме).
Попробуйте:
realtime1=$(mktemp)
realtime2=$(mktemp)
\time -o "${realtime1}" -f "%e" sleep 5 &
\time -o "${realtime2}" -f "%e" sleep 10 &
wait
printf "Number of seconds used by program1: %s\n" $(cat "${realtime1}")
printf "Number of seconds used by program2: %s\n" $(cat "${realtime2}")
Тест:
$ bash script.sh
Number of seconds used by program1: 5.00
Number of seconds used by program2: 10.00
с отображением пространства имен пользователей
/etc/subuid for User IDs
/etc/subgid for Group IDs
используются для определения диапазона, в котором идентификаторы пользователей в контексте контейнера сопоставляются с фактическим идентификатором хоста.
Итак, для
/etc/subuid > foo:100000:5000
например, процесс, принадлежащий '0' в , контейнер может фактически принадлежать на узле User NS с идентификатором пользователя где-то в 100000+5000.
Если теперь в контексте хоста какой-то ресурс ограничен определенными идентификаторами пользователей, возможно, хотя в контейнере идентификатор пользователя выглядит хорошо, в фактическом контексте хоста идентификатор находится где-то в верхних диапазонах и, следовательно, не может получить доступ к ресурсу..