El archivo en /proc/<pid>/iorepresenta lo que necesita. Es un trabajo de secuencia de comandos un poco para obtener una salida similar a iotop. Consulte la documentación del kernel de Linux para ver los /proc/<pid>/iovalores del archivo:
  rchar
  
  Contador de E / S: caracteres leídos El número de bytes que esta tarea ha provocado que se lean del almacenamiento. Esto es simplemente la suma de bytes que este proceso pasó a read () y pread (). Incluye cosas como tty IO y no se ve afectado por si se requirió o no un disco físico real (la lectura podría haberse satisfecho desde el caché de página)
  
  wchar
  
  Contador de E / S: caracteres escritos El número de bytes que esta tarea ha causado o causará que se escriban en el disco. Advertencias similares se aplican aquí como con rchar.
  
  [...]
  
  leer_bytes
  
  Contador de E / S: lectura de bytes Intente contar la cantidad de bytes que este proceso realmente provocó que se obtuviera de la capa de almacenamiento. Hecho en el nivel submit_bio (), por lo que es preciso para sistemas de archivos respaldados por bloques.
  
  escritura_bytes
  
  Contador de E / S: bytes escritos Intente contar el número de bytes que este proceso provocó que se enviaran a la capa de almacenamiento. Esto se hace en el momento de ensuciar la página
Ahora, puedes usar ese pequeño bashscript:
#!/bin/bash
if [ "$(id -u)" -ne 0 ] ; then
  echo "Must be root" 2>&1
  exit 1
fi
delay=2
lista=$(for p in $(pgrep "."); do echo -n "$p "; grep ^rchar /proc/$p/io 2>/dev/null; done)
while :; do
  echo "-----"
  listb=$(for p in $(pgrep "."); do echo -n "$p "; grep ^rchar /proc/$p/io 2>/dev/null; done)
  echo "$lista" | while read -r pida xa bytesa; do
    [ -e "/proc/$pida" ] || continue
    echo -en "$pida:\t"
    bytesb=$(echo "$listb" | awk -v pid=$pida '$1==pid{print $3}')
    echo "$((($bytesb - $bytesa) / $delay)) b/s"
  done | sort -nk2 | tail
  sleep $delay
  listb=$lista
done
Crea dos listas con un retraso de 2 segundos ( $delay: puede ser incluido o disminuido) entre ellas, y luego compara las listas y calcula las diferencias. Los 10 procesos con más E / S se imprimen con su ancho de banda de E / S en los últimos 2 segundos. Si desea escribir E / S en lugar de leer E / S, simplemente edite el grepcomando en las listas en wcharlugar de rchar:
lista=$(for p in $(pgrep "."); do echo -n "$p "; grep ^wchar /proc/$p/io 2>/dev/null; done)
listb=$(for p in $(pgrep "."); do echo -n "$p "; grep ^wchar /proc/$p/io 2>/dev/null; done)