In many versions of the Bourne shell,
background processes (
1.26
)
are automatically killed with a HANGUP signal (signal 1) on logout.
But the C shell makes background processes immune to signals
and a HANGUP signal at logout doesn't affect the processes; they keep
running.
If you want the C shell to work like the Bourne shell, put lines like
these in your
.logout
file (
3.1
)
:
/tmp
! -z
-v
eval
|
set tf=/tmp/k$$
jobs >$tf
if (! -z $tf) then # there are jobs
jobs >$tf.1 # rerun it to dump `Done' jobs
# skip Stopped jobs (killed by default)
grep -v Stopped <$tf.1 >$tf; rm $tf.1
# cannot use a pipe here
if (! -z $tf) then # there are running jobs
eval `echo kill -1; sed 's/.\([0-9]*\).*/%\1/' <$tf`
endif
endif
rm $tf
|
Warning: this may run afoul of various
csh
quirks (
47.2
)
.
[To watch this work, put
set
verbose
echo
(
8.17
)
at the top of your
.logout
file.
If the logout process clears your screen or closes the window, you can
give yourself
n
seconds to read the debugging output by adding
sleep
n
(
40.2
)
to the end of your
.logout
file.
-JP
]
The important trick is to run
jobs >file
, not
jobs | command
, as the latter runs
jobs
in a
subshell (
38.4
)
and
thus produces no output,
although
jobs
|
any-csh-builtin
is
good for a laugh
:-)
.