---
name: "proc_pid_io"
section: "5"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/proc_pid_io"
---

# proc\_pid\_io(5)

I/O statistics

## NAME

/proc/pid/io - I/O statistics

## DESCRIPTION

- */proc/*pid*/io* (since Linux 2.6.20)

  This file contains I/O statistics for the process and its waited-for children, for example:

-

  ```
  # cat /proc/3828/io
  rchar: 323934931
  wchar: 323929600
  syscr: 632687
  syscw: 632675
  read_bytes: 0
  write_bytes: 323932160
  cancelled_write_bytes: 0
  ```

-

  The fields are as follows:

  - *rchar*: characters read

    The number of bytes returned by successful [**read**(2)](/read/2.md) and similar system calls.

  - *wchar*: characters written

    The number of bytes returned by successful [**write**(2)](/write/2.md) and similar system calls.

  - *syscr*: read syscalls

    The number of "file read" system calls—those from the [**read**(2)](/read/2.md) family, [**sendfile**(2)](/sendfile/2.md), [**copy\_file\_range**(2)](/copy_file_range/2.md), and [**ioctl**(2)](/ioctl/2.md) **BTRFS\_IOC\_ENCODED\_READ**\[**\_32**\] (including when invoked by the kernel as part of other syscalls).

  - *syscw*: write syscalls

    The number of "file write" system calls—those from the [**write**(2)](/write/2.md) family, [**sendfile**(2)](/sendfile/2.md), [**copy\_file\_range**(2)](/copy_file_range/2.md), and [**ioctl**(2)](/ioctl/2.md) **BTRFS\_IOC\_ENCODED\_WRITE**\[**\_32**\] (including when invoked by the kernel as part of other syscalls).

  - *read\_bytes*: bytes read

    The number of bytes really fetched from the storage layer. This is accurate for block-backed filesystems.

  - *write\_bytes*: bytes written

    The number of bytes really sent to the storage layer.

  - *cancelled\_write\_bytes*:

    The above statistics fail to account for truncation: if a process writes 1 MB to a regular file and then removes it, said 1 MB will not be written, but *will* have nevertheless been accounted as a 1 MB write. This field represents the number of bytes "saved" from I/O writeback. This can yield to having done negative I/O if caches dirtied by another process are truncated. *cancelled\_write\_bytes* applies to I/O already accounted-for in *write\_bytes*.

-

  Permission to access this file is governed by [**ptrace**(2)](/ptrace/2.md) access mode **PTRACE\_MODE\_READ\_FSCREDS**.

## CAVEATS

These counters are not atomic: on systems where 64-bit integer operations may tear, a counter could be updated simultaneously with a read, yielding an incorrect intermediate value.

## SEE ALSO

[**getrusage**(2)](/getrusage/2.md), [**proc**(5)](/proc/5.md)
