@@ -30,3 +30,30 @@ There is a tool for investigative reporting at news organizations, that develope
...
@@ -30,3 +30,30 @@ There is a tool for investigative reporting at news organizations, that develope
Note: Tabula only works on text-based PDFs, not scanned documents.
Note: Tabula only works on text-based PDFs, not scanned documents.
## Q: What is my process doing?
If you experience processes that are slower than they should be or you are unsure what it is doing. There are certain ways to get more information.
### Process States
For example if you run `ps ux` or `htop` and check your process, you should see a state with the following meaning:
D = UNINTERRUPTABLE_SLEEP
R = RUNNING & RUNNABLE
S = INTERRRUPTABLE_SLEEP
T = STOPPED
Z = ZOMBIE
Processes in a **"D"** or uninterruptible sleep state are usually waiting on I/O. The ps command shows a "D" on processes in an uninterruptible sleep state. The vmstat command also shows the current processes that are "blocked" or waiting on I/O. The vmstat and ps will not agree on the number of processes in a "D" state, so don't be too concerned. You cannot kill "D" state processes, even with `SIGKILL` or `kill -9`. As the name implies, they are uninterruptible. You can only clear them by rebooting the server or waiting for the I/O to respond. It is normal to see processes in a "D" state when the server performs I/O intensive operations.
As root you can do `echo w > /proc/sysrq-trigger` and check the `dmesg -T` what the stacktrace reports.
Processes in a **"S"** or interruptable sleep state are waiting for the user or data to continue. Unlike processes in a **"T"** or stopped state, which must have been suspended, with e.g. Ctrl+Z. Using `jobs` to see what processees you have or running `fg` to get the processes back to your command line.
Processes in a **"Z"** or zombie state are being terminated by the parent processes. If the parent did not clean up, a zombie processes lingers.
**How to kill a zombie processes?**
The first step is to find its parent process. Typically there is a column in the "ps" output for PPID or Parent Process ID. You want to identify this number. Once you do you can send a SIGCHLD signal to that parent to tell it to perform this cleanup.
`kill -s SIGCHLD <PPID>`
In worst case scenarios where the parent is generating a lot of zombie processes that are not getting cleaned up, you can kill or restart the parent.