GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo ver en qué núcleo de CPU se está ejecutando un subproceso?

El comando "superior" puede ayudar con esto, no tiene una lista de subprocesos agrupados por CPU, sino que puede ver la lista de subprocesos (probablemente para un solo proceso) y en qué núcleos de CPU se ejecutan los subprocesos

top -H -p {PROC_ID}

luego presionando f para ir a la selección de campos, j para habilitar la columna del núcleo de la CPU y Intro para mostrar.


También puedes usar ps , algo como esto:

ps -mo pid,tid,%cpu,psr -p `pgrep BINARY-NAME`

La respuesta a continuación ya no es precisa a partir de 2014

Las tareas no duermen en ningún núcleo en particular. Y el programador no sabrá de antemano en qué núcleo ejecutará un subproceso porque eso dependerá del uso futuro de esos núcleos.

Para obtener la información que desea, busque en /proc//task//status. El tercer campo será una 'R' si el subproceso se está ejecutando. El sexto desde el último campo será el núcleo en el que se ejecuta actualmente el subproceso, o el núcleo en el que se ejecutó por última vez (o al que se migró) si no se está ejecutando actualmente.

31466 (bc) S 31348 31466 31348 34819 31466 4202496 2557 0 0 0 5006 16 0 0 20 0 1 0 10196934 121827328 1091 18446744073709551615 4194304 4271839 140737264235072 140737264232056 217976807456 0 0 0 137912326 18446744071581662243 0 0 17 3 0 0 0 0 0

No se está ejecutando actualmente. Se ejecutó por última vez en Core 3.

31466 (bc) R 31348 31466 31348 34819 31466 4202496 2557 0 0 0 3818 12 0 0 20 0 1 0 10196934 121827328 1091 184444444073737095551615 4194304 4271839 1407372642350722242242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242422342232322323223223232ES 0 0 0 0 0

Actualmente se ejecuta en el núcleo 2.

Para ver qué significan el resto de los campos, eche un vistazo a la fuente del kernel de Linux, específicamente el do_task_stat función en fs/proc/array.c o Documentation/filesystems/stat.txt .

Tenga en cuenta que toda esta información puede estar obsoleta para cuando la obtenga. Fue cierto en algún momento entre cuando hiciste el open llame al archivo en proceso y cuando regrese esa llamada.


Los subprocesos no son necesarios para vincular un Core en particular (si no lo fijó). Por lo tanto, para ver el cambio continuo del núcleo, puede usar (una respuesta modificada de Dmitry):

watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p \`pgrep BINARY-NAME\`

Por ejemplo:

watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p \`pgrep firefox\`

Linux
  1. ¿Cómo puede encontrar el número de procesador en el que se está ejecutando un subproceso?

  2. ¿Puede Python detectar con qué sistema operativo se está ejecutando?

  3. ¿Cómo probar en qué puerto se está ejecutando MySQL y si se puede conectar?

  4. ¿Cómo puedo saber qué proceso está usando swap?

  5. ¿Cómo puedo saber la ruta absoluta de un proceso en ejecución?

Cómo monitorear la temperatura de una CPU en el sistema Redhat 7 Linux

¿Cómo puedo perfilar el código C++ que se ejecuta en Linux?

Cómo encontrar qué proceso está causando un alto uso de la CPU

¿Cómo puedo ver la salida de dmesg a medida que cambia?

¿Cómo hacer que todos los procesos se ejecuten en cada núcleo de CPU en Ubuntu?

¿Cómo puedo averiguar qué sistema operativo de servidor está ejecutando un sitio en particular?