Почти каждая основная среда рабочего стола следует поведению, которое началось несколько десятилетий назад с некоторыми из самых ранних графических интерфейсов. Есть несколько причин, по которым такое обращение с рабочим столом полезно :
.Были некоторые системы, которые обрабатывали это по-разному, хотя на протяжении многих лет, например, AmigaOS (и AROS ). В AmigaOS «рабочий стол» на самом деле представляет собой специальное окно файлового менеджера, которое было настроено так, чтобы открывать все, что вы щелкаете, как новое окно и всегда находиться внизу стека окон. Это поведение имеет некоторые проблемы (, в первую очередь то, что вы можете переместить «рабочий стол» достаточно далеко от экрана, чтобы вы не могли вернуть его обратно без перезапуска графического интерфейса ), но на самом деле оно было скопировано в несколько иной форме. некоторыми средами рабочего стола UNIX (, которые часто используют общий код между своим файловым менеджером и фактической программой рабочего стола ).
Если вы установите ЦП для вызывающего процесса, похоже, что каждый дочерний процесс будет иметь одинаковые настройки.
Например, учитывая:
Сеанс 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