nickson@comp.vuw.ac.nz (Ray Nickson) (09/07/89)
Bash version 1.03, on an HP300 running More/BSD, GCC-compiled.
Have you looked at my (cat /etc/passwd) | cat bug at all?
It seems to me that this problem is related to the shell's decision to
put each side of the pipe in (foo)|(bar) into a separate job:
bash-1.03$ (sleep 100) | (sleep 200)
^Z
[1]+ Stopped ( sleep 100 )
^Z
[2]+ Stopped ( sleep 200 )
bash-1.03$ jobs
[1]- Stopped ( sleep 100 )
[2]+ Stopped ( sleep 200 )
bash-1.03$
Furthermore, the subshells get stopped, but the commands in them do not:
bash-1.03$ jobs
[1]- Stopped ( sleep 100 )
[2]+ Stopped ( sleep 200 )
bash-1.03$ ps
PID TT STAT TIME COMMAND
1932 p0 I 0:04 bash <- my parent shell (still 1.02!)
3003 p0 S 0:03 bash-1.03 <- the shell with the 'bash-1.03$ ' prompt
3014 p0 T 0:00 bash-1.03 }
3015 p0 S 0:00 sleep 100 } the subshells and the commands
3016 p0 T 0:00 bash-1.03 }
3017 p0 S 0:00 sleep 200 }
3020 p0 R 0:00 ps
bash-1.03$
(the STAT column of our ps has T=stopped, S=short-term sleep,
I=long-term sleep, R=run).
I don't know who defines what a job really is (Posix?), but this does
not appear to be the way ksh does it, and is certainly not the way csh
does it. Is it a bug or a feature?
(ksh version ??? on an HP300 running HPUX6.5):
ksh$ (sleep 100)|(sleep 200)
[1] + Stopped (sleep 100)|(sleep 200)
ksh$ jobs
[1] + Stopped (sleep 100)|(sleep 200)
ksh$
(csh version ??? on an HP300 running More/BSD):
csh% (sleep 100)|(sleep 200)
^Z
Stopped
csh% jobs
[1] + Stopped ( sleep 100 ) | ( sleep 200 )
csh% ps
PID TT STAT TIME COMMAND
1932 p0 IW 0:06 bash
3085 p0 S 0:00 -sh (csh)
3096 p0 T 0:00 sleep 100
3097 p0 T 0:00 sleep 200
3098 p0 R 0:00 ps
csh% kill 3096
csh% jobs
[1] + Terminated ( sleep 100 ) |
Stopped ( sleep 200 )
csh%
-rgn
--
Ray Nickson, Dept. Comp. Sci., Victoria University of Wellington, New Zealand.
nickson@comp.vuw.ac.nz ...!uunet!vuwcomp!nickson + 64 4 721000x8593