Какую библиотечную функцию я могу вызвать, чтобы отобразить процессы на ядра или с помощью идентификатора процесса, сказать мне, на каком ядре оно работает, какое оно запускалось в прошлый раз или по расписанию. Так что-то вроде этого:
core 1: 14232,42323
core 2: 42213,63434,434
core 3: 34232,34314
core 4: 42325,6353,1434,4342
core 5: 43432,64535,14345,34233
core 6: 23242,53422,4231,34242
core 7: 78789
core 8: 23423,23124,5663
я sched_getcpu
возвращает основной номер вызывающего процесса. Если бы существовала функция с заданным идентификатором процесса, она вернула бы номер ядра, что также было бы хорошо, но я не нашел его. sched_getaffinity
тоже не полезно; Это просто говорит вам, учитывая процесс, на каких ядрах он может работать, а это не то, что меня интересует.
Да, виртуальный файл /proc/[pid]/stat
кажется, есть эта информация: man 5 proc
:
/proc/[pid]/stat
Status information about the process. This is used by ps(1). It is
defined in /usr/src/linux/fs/proc/array.c.
(...fields description...)
processor %d (since Linux 2.2.8)
CPU number last executed on.
на моем двухъядерном
cat /proc/*/stat | awk '{printf "%-32s %d\n", $2 ":", $(NF-5)}'
(su): 0
(bash): 0
(tail): 1
(hd-audio0): 1
(chromium-browse): 0
(bash): 1
(upstart-socket-): 1
(rpcbind): 1
..хотя я не могу сказать, если это уместно и / или точно ..
Я не знаю, что вы можете получить информацию о том, какой процессор какого-либо конкретного процесса является работает, но если вы посмотрите в /proc
вы найдете одну запись для каждого запущенного процесса. Под этим в /proc/<pid>/cpuset
вы найдете информацию о наборе процессоров, которые можно использовать для запуска этого процесса.
На ваш вопрос нет точного ответа. Планировщик может в любое время мигрировать процесс с одного ядра процессора на другое (и он на самом деле это делает). Так что к тому времени, как вы получите ответ, он может быть уже неправильным. И процесс, как правило, не привязан к какому-либо конкретному ядру (если его Сродство процессора был установлен, например, с sched_setaffinity (2), что необычно; смотрите также cpuset (7) для большего).
Почему ты спрашиваешь? Почему это имеет значение?
Вы, вероятно, хотите копать внутри / Proc, увидеть Proc (5) справочная страница.
Другими словами, если ядро действительно предоставляет эту информацию, оно /proc/
но я думаю, что информация недоступна, потому что это не имеет никакого смысла.
NB. Ядро будет планировать процессы на различных процессорных ядрах намного лучше, чем вы можете, поэтому даже при наличии хранилища вам не нужно заботиться о ядре, на котором запущен какой-то pid.