Если вы установите ЦП для вызывающего процесса, похоже, что каждый дочерний процесс будет иметь одинаковые настройки.
Например, учитывая:
Сеанс screen
, запущенный с использованиемtaskset 4 screen
В сеансе screen
запущено 3 экземпляра top
Когда я просматриваю (в другом терминале )статус top
экземпляров:
for pid in $(ps aux|grep -i top|grep -v grep|awk '{print $2}') ; do taskset -p ${pid} ; done
pid 2505's current affinity mask: 4
pid 2515's current affinity mask: 4
pid 2525's current affinity mask: 4
Вот пример скрипта bash, выполняющего эту работу:
#!/bin/bash
echo "Setting CPU affinity..."
# Bind to a given CPU
taskset -p 4 $$
# Verify it worked
taskset -p $$
echo "Launching background jobs..."
# Now, launch several background jobs
for i in $(seq 0 10) ; do
tail -f /dev/null &
done
echo "Checking..."
# Now for each instance of background jobs, check CPU affinity
for pid in $(pidof tail) ; do
taskset -p ${pid}
done
sleep 1
killall tail
И результирующий вывод:
Setting CPU affinity...
pid 4313's current affinity mask: f
pid 4313's new affinity mask: 4
pid 4313's current affinity mask: 4
Launching background jobs...
Checking...
pid 4327's current affinity mask: 4
pid 4326's current affinity mask: 4
pid 4325's current affinity mask: 4
pid 4324's current affinity mask: 4
pid 4323's current affinity mask: 4
pid 4322's current affinity mask: 4
pid 4321's current affinity mask: 4
pid 4320's current affinity mask: 4
pid 4319's current affinity mask: 4
pid 4318's current affinity mask: 4
./test.sh: line 24: 4317 Terminated tail -f /dev/null
./test.sh: line 24: 4318 Terminated tail -f /dev/null
./test.sh: line 24: 4319 Terminated tail -f /dev/null
./test.sh: line 24: 4320 Terminated tail -f /dev/null
./test.sh: line 24: 4321 Terminated tail -f /dev/null
./test.sh: line 24: 4322 Terminated tail -f /dev/null
./test.sh: line 24: 4323 Terminated tail -f /dev/null
./test.sh: line 24: 4324 Terminated tail -f /dev/null
./test.sh: line 24: 4325 Terminated tail -f /dev/null
./test.sh: line 24: 4326 Terminated tail -f /dev/null
./test.sh: line 24: 4327 Terminated tail -f /dev/null
Добавление fsid к обоим экспортируемым файлам помогло.
Хост:
cat /etc/exports
/usr/portage *(sync,rw,no_root_squash,subtree_check,nohide,fsid=1)
/ *(sync,rw,no_root_squash,no_subtree_check,crossmnt,nohide,fsid=0)