Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Frozen command substitution

I have two long running scripts that do complex interaction with
the web browser, say "foo" which calls the subordinate script
"bar".  The browser crashes once in a while and is restarted
automatically by some other script.  Sometimes when this happens,
foo freezes in a call of bar and won't wake up anymore when bar

-- foo --
while true; do
	test some-condition && break

some-func () {
	while true; do
		R="$(bar ssome arguments)"  <------- hangs in this line
		test some condition && return 0
-- foo --

-- bar --
# some long-running loop
# ...

return 0
-- bar --


Dominik ^_^  ^_^


So, foo calls bar in a loop.  While bar is running, the browser is
restarted.  bar detects this, finishes and exits with the "return
0".  However, foo does not continue with the line after the
command substitution.  A "ctrl-z" foollowed by "fg" does not help.
Sending it SIGUSR1 (which has a trap installed) wakes it up again.
In the process list:

  $ pstree -a

(The whole stuff is calles with
"while true; do foo 2>&1 | tee foo.out; done".)  /proc/<pid>/status says:

  $ cat /proc/<pid>/status
  State:  S (sleeping)
  Tgid:   13030
  Ngid:   0
  Pid:    13030
  PPid:   24927

foo has a trap for "HUP" installed, and that's being called when
when I type "killall -HUP foo", so the shell is not dead.  "ps"
lists the processes' status as "S+".

Dominik Vogt

Messages sorted by: Reverse Date, Date, Thread, Author