Hi Thorsten,
i've just detected something that may interest you.
I wanted to start something after a background command finished,
but wait(1) didn't work.  Turned out that the reason was that i've
used signals to temporarily stop that background process.
The good news is that only ksh93 (?) and bash(1) get that „right“,
i.e., the way i expect it.

  mksh(1):

  ?0[steffen@sherwood]$ /bin/sleep 30 &
  [1] 43732
  ?0[steffen@sherwood]$ wait %1
  ^C
  ?130[steffen@sherwood]$ jobs
  [1] + Running              /bin/sleep 30 
  ?1[steffen@sherwood]$ kill -STOP %1
  [1] + Suspended (signal)   /bin/sleep 30 
  ?0[steffen@sherwood]$ jobs
  [1] + Suspended (signal)   /bin/sleep 30 
  ?0[steffen@sherwood]$ wait %1
  ?0[steffen@sherwood]$ kill -CONT %1
  ?0[steffen@sherwood]$ jobs
  [1] + Suspended (signal)   /bin/sleep 30 
  ?0[steffen@sherwood]$ wait %1
  ?0[steffen@sherwood]$ wait
  ?0[steffen@sherwood]$ jobs
  [1] + Suspended (signal)   /bin/sleep 30 
  ?0[steffen@sherwood]$ jobs
  [1] + Done                 /bin/sleep 30 

  dash(1):

  * [steffen@sherwood]$ /bin/sleep 30 &   
  * [steffen@sherwood]$ jobs
  [1] + Running                    /bin/sleep 30
  * [steffen@sherwood]$ wait %1
  ^C
  * [steffen@sherwood]$ jobs
  [1] + Running                    /bin/sleep 30
  * [steffen@sherwood]$ kill -TSTP %1
  [1] + Suspended                  /bin/sleep 30
  * [steffen@sherwood]$ wait %1
  * [steffen@sherwood]$ jobs
  [1] + Suspended                  /bin/sleep 30
  * [steffen@sherwood]$ kill -CONT %1
  * [steffen@sherwood]$ jobs
  [1] + Suspended                  /bin/sleep 30
  * [steffen@sherwood]$ wait %1
  * [steffen@sherwood]$ wait
  * [steffen@sherwood]$ jobs
  [1] + Suspended                  /bin/sleep 30
  * [steffen@sherwood]$     
  [1] + Done                       /bin/sleep 30
  * [steffen@sherwood]$ ^D

  NetBSD /bin/sh(1):

  * [steffen@nhead]$ /bin/sleep 30 &
  * [steffen@nhead]$ jobs
  [1] + Running                 /bin/sleep 30
  * [steffen@nhead]$ kill -STOP %1
  * [steffen@nhead]$ jobs
  [1] + Running                 /bin/sleep 30
  * [steffen@nhead]$ wait %1
  [1] + Suspended (signal)      /bin/sleep 30
  * [steffen@nhead]$ kill -CONT %1
  * [steffen@nhead]$ jobs
  [1] + Suspended (signal)      /bin/sleep 30
  * [steffen@nhead]$ wait %1
  * [steffen@nhead]$ wait
  * [steffen@nhead]$ jobs
  [1] + Suspended (signal)      /bin/sleep 30
  * [steffen@nhead]$ 
  [1]   Done                    /bin/sleep 30
  * [steffen@nhead]$ 

  bash(1):

  ?0[steffen@sherwood]$ /bin/sleep 30 &
  [1] 43752
  ?0[steffen@sherwood]$ wait %1
  ^C
  ?1[steffen@sherwood]$ kill -STOP %1
  ?0[steffen@sherwood]$ jobs
  [1]+  Running                 /bin/sleep 30 &
  ?0[steffen@sherwood]$ wait %1

  [1]+  Stopped                 /bin/sleep 30
  ?145[steffen@sherwood]$ wait %1
  bash: warning: wait_for_job: job 1 is stopped
  ?145[steffen@sherwood]$ kill -CONT %1
  ?0[steffen@sherwood]$ jobs
  [1]+  Running                 /bin/sleep 30 &
  ?0[steffen@sherwood]$ wait %1
  ^C
  ?1[steffen@sherwood]$ jobs
  [1]+  Running                 /bin/sleep 30 &
  ?0[steffen@sherwood]$ 
  [1]+  Done                    /bin/sleep 30

  Mac OS X /bin/ksh(1):

  ?0[steffen@sherwood]$ /bin/sleep 30 &
  [1]   43762
  ?0[steffen@sherwood]$ jobs
  [1] +  Running                 /bin/sleep 30 &
  ?0[steffen@sherwood]$ wait  
  ^C?258[steffen@sherwood]$ jobs
  [1] +  Running                 /bin/sleep 30 &
  ?0[steffen@sherwood]$ kill -STOP %1
  ?0[steffen@sherwood]$ jobs         
  [1] +  Running                 /bin/sleep 30 &
  ?0[steffen@sherwood]$ wait %1
  [1] + Stopped (SIGSTOP)        /bin/sleep 30 &
  ?0[steffen@sherwood]$ kill -CONT %1
  ?0[steffen@sherwood]$ jobs
  [1] +  Running                 /bin/sleep 30 &
  ?0[steffen@sherwood]$ wait %1

  ^C?258[steffen@sherwood]$ jobs
  ?0[steffen@sherwood]$ 

Ciao,

--steffen

Reply via email to