Do You Understand Job Control in Bash?
symkat.com
symkat.com
disown
disown [-ar] [-h] [jobspec ...]
Without options, each jobspec is removed from the table of active jobs.
If the `-h' option is given, the job is not removed from the table,
but is marked so that SIGHUP is not sent to the job if the shell receives
a SIGHUP. If jobspec is not present, and neither the `-a' nor `-r'
option is supplied, the current job is used. If no jobspec is
supplied, the `-a' option means to remove or mark all jobs; the `-r'
option without a jobspec argument restricts operation to running jobs.
The important part:That means...
$ ./some_really_long_process
(crud... I forgot to open GNU Screen first!)
^Z
[1]+ Stopped
$ bg
[1]+ ./some_really_long_process &
$ disown
$ pgrep some_really_long_process
12349
$ logout
Now, log in again... $ pgrep some_really_long_process
12349
I do not know of a way to "reclaim" a disowned process, though.http://caca.zoy.org/wiki/neercs
Maybe someone can rip out the relevant parts and create "reattach" and get it in coreutils :)
I have tried http://pasky.or.cz/~pasky/dev/retty/ before, with limited success. It would reattach a terminal running vim, but not Matlab, and was generally a bit flakey.
EDIT: I have now tried neercs. Like retty, vim can be stolen but attempting to steal zsh shell or Matlab sessions causes crashes.
I was once told VMS used to have decent native support for reattaching terminals? It's frustrating that we don't have this ability (at least not seemlessly) now.
There was a project to make screen easier to use, integrating it with gnome-terminal: http://monia.wordpress.com/2006/08/31/integrating-gnome-term... but the patches were never accepted.
Understanding how your system works is a different level from choosing the tools in the first place.
A large part of my job involves working with remote Linux servers, so I chose to invest time learning Linux command line tools and vim. Now I'm more productive in a terminal than in a GUI environment. I use common tools that are installed by default on Linux/Unix/OSX, so I can sit down anywhere and do my work, or SSH directly into my machine and have my exact work environment securely and without latency.
A gui is a poor mans command line.
Whichever I'm using there are always aspects of the work that you could do better with the other.
- browsing the web (sorry, lynx users)
- play games (not that I'm a gamer)
- desk-top publishing
- routing a PCB
- CAD
and so on...
But then, each of those has moments when you think to yourself 'Man, I wished I could script this' (well, maybe not the games).
remind() {
[[ $# -ge 2 ]] || { echo >&2 "Usage: $FUNCNAME time msg"; return 1; }
local sec="$(($1*60))"
( trap "echo \"\$sec seconds left\"" QUIT
while ((--sec > 0)); do sleep 1; done
say "${@:2}" # OS X only, replace with your favorite notifier
) 2>/dev/null &
}
$ remind 30 get the laundry
Query time remaining with kill -QUIT %jobspec. Good for systems that don't have at(1).Favorite notifier:
echo "${@:2}" | growlnotify -t Reminder -s -m - ( sleep 1800 ; say "get the laundry" )& remind [minutes] [message]
Functions can be imported to your shell. =) $ cd workingdir
$ vim conffile
(edit, then within file press CTRL-Z, which suspends)
$ start_program
(notice errors or misbehaviours based on bad config)
$ fg
(edit config file some more, open different buffer)
** repeat untill things are happy **
This is a minimal use of job control, but it is nice.Other uses include juggling several programs at once, sometimes screen gets too annoying for simple progress monitoring of several processes at once. (One window per command for say 20 commands, makes it difficult to switch through to find the one vim one, or the sql prompt... 3 on the other hand is fairly easy).
# kill -STOP $pid
# kill -CONT $pid
in Plan9 we do: echo stop > /proc/$pid/noteWhen they copied the /proc file system into Linux they did a cack handed version (as expected) - "by amateurs, for amateurs" as Dave Presotto put it.