I’m reading Smarter Faster Better which shows The Engineering Design Process:
Tag Archives: process
How to check which process is causing IO wait
The ‘wa’ state in `top` can indicate an IO wait, but to figure out what’s causing the IO wait try this command:
# ps aux | awk '$8 ~ /D/ { print $0 }' | less
You can read more here. Thanks to bsandro on #lobsters.
According to `man top`:
The status of the task can be one of: D = uninterruptible sleep I = idle R = running S = sleeping T = stopped by job control signal t = stopped by debugger during trace Z = zombie
Object Versus Process
It’s a fine line between quackery and genius: Object Versus Process. I’m not sure if I agree with the author’s conclusions, but I did enjoy reading his paper.
Bash wait
Today I learned about the ‘wait’ command. It waits for background processes to terminate before returning, so you can fire off a bunch of jobs to be run in parallel and then wait for all of them to complete before continuing, like in this take-ownership.sh script I wrote tonight:
#!/bin/bash if [ -n "$1" ]; then pushd "$1" > /dev/null 2>&1 if [ "$?" -ne "0" ]; then echo "Cannot change dir to '$1'."; exit 1; fi fi sudo chown -R jj5:jj5 . & sudo find . -type d -exec chmod u+rwx {} \; & sudo find . -type f -exec chmod u+rw {} \; & if [ -n "$1" ]; then popd > /dev/null 2>&1 fi wait exit 0
Changing parent’s directory from a subshell
I was trying to figure out how to have a child process change the current directory of a parent process. Turns out you can’t quite do that. One thing I guess you could do is export a global variable and then have the parent check that when the child returns, but I decided on another approach. What I do is write a file to ~/bin/errdir that contains a single line in the format:
pushd "/path/to/directory"
I can then source this as a command file after my script has run to change directory into the directory where the last erroneous file was encountered with the command:
$ . errdir
When I’m finished I can just type ‘popd’ to return myself to wherever I was before I changed into the error directory.