CARVIEW |
Select Language
HTTP/2 200
date: Sun, 12 Oct 2025 09:58:34 GMT
server: Fly/6f91d33b9d (2025-10-08)
content-type: text/html; charset=utf-8
content-encoding: gzip
via: 2 fly.io, 2 fly.io
fly-request-id: 01K7BXQ47NPPCJWV9N05NY02YH-bom
Basic strace to see what a process is doing | Simon Willison’s TILs
Basic strace to see what a process is doing
I had a long-running process and I wanted to check that it was at least doing something.
I know its PID (32425 in this case) - here's how to use strace
to see what it's doing right now. This command outputs a lot of lines very quickly - hit Ctrl+C
to stop it.
$ sudo strace -p 32425
strace: Process 32425 attached
lseek(4, 923287936, SEEK_SET) = 923287936
write(4, "\r\0\0\0\1\0\"\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
lseek(3, 919687168, SEEK_SET) = 919687168
read(3, "\r\0\0\0\1\0\"\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
lseek(4, 923292032, SEEK_SET) = 923292032
write(4, "\0\3kf\0\0\0\0\265\17I\247\326\307U\263xF\34\305\336\231\352a", 24) = 24
lseek(4, 923292056, SEEK_SET) = 923292056
So at least there's stuff happening!
Running strace -c
does a count of syscalls and provides a summary. The command appears not to do anything, but when you hit Ctrl+C
after a few seconds it will dump out the counts so far:
$ sudo strace -c -p 32425
strace: Process 32425 attached
^Cstrace: Process 32425 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
56.67 0.048823 28 1741 write
29.60 0.025496 10 2613 lseek
13.73 0.011828 14 871 read
------ ----------- ----------- --------- --------- ----------------
100.00 0.086147 5225 total
The -k
option adds stack traces to each syscall which give a better idea of where in the code the syscalls are being made from:
$ sudo strace -k -p 32425
strace: Process 32425 attached
lseek(4, 974466576, SEEK_SET) = 974466576
> /lib/x86_64-linux-gnu/libc-2.27.so(llseek+0x7) [0x110327]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(unixWrite+0x5d) [0x393cd]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(pagerWalFrames+0x5e5) [0xa8e75]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(pagerStress+0x13f) [0xa9cff]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(getPageNormal+0x33a) [0xadeea]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(backupOnePage.isra.666+0x102) [0xa86c2]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(sqlite3_backup_step+0x2f2) [0xb7a12]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(sqlite3RunVacuum+0x95c) [0x10534c]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(sqlite3VdbeExec+0x1dbf) [0xe230f]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(sqlite3_step+0x210) [0xec3d0]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(pysqlite_step+0x1e) [0x23fae]
> /home/ubuntu/datasette-venv/lib/python3.6/site-packages/pysqlite3/_sqlite3.cpython-36m-x86_64-linux-gnu.so(_pysqlite_query_execute+0x359) [0x22309]
> /usr/bin/python3.6(PyCFunction_Call+0x52) [0x1670e2]
> /usr/bin/python3.6(PyObject_Call+0x3e) [0x19fe1e]
Related
- macos Using lsof on macOS - 2021-12-11
- macos Using fs_usage to see what files a process is using - 2023-06-15
- docker Running gdb against a Python process in a running Docker container - 2021-03-21
- python Tracing every executed Python statement - 2021-03-21
- macos Seeing files opened by a process using opensnoop - 2022-04-26
- sqlite Using LD_PRELOAD to run any version of SQLite with Python - 2020-06-17
- webassembly Run Python code in a WebAssembly sandbox - 2023-02-02
- pytest Mocking subprocess with pytest-subprocess - 2023-03-08
- cloudrun Tailing Google Cloud Run request logs and importing them into SQLite - 2021-08-09
- pytest Testing a Click app with streaming input - 2022-01-09
Created 2020-09-07T16:14:00-07:00, updated 2020-09-07T16:19:43-07:00 · History · Edit