diff options
| author | root <root@pigstarter.de> | 2013-11-05 13:24:42 +0100 | 
|---|---|---|
| committer | root <root@pigstarter.de> | 2013-11-05 13:24:42 +0100 | 
| commit | 5e326f51c58e500285ea3daee91986ee1ea518eb (patch) | |
| tree | 2b3eccf15e10e4331dcb2d01c9f53620d749f55f /sandbox/hyper/process/spawn | |
| parent | ae627d2aa73ea6862af3985f1c07e95c6d493275 (diff) | |
sandbox -> .graveyard
Diffstat (limited to 'sandbox/hyper/process/spawn')
| -rwxr-xr-x | sandbox/hyper/process/spawn | 103 | 
1 files changed, 0 insertions, 103 deletions
diff --git a/sandbox/hyper/process/spawn b/sandbox/hyper/process/spawn deleted file mode 100755 index 65e94d86..00000000 --- a/sandbox/hyper/process/spawn +++ /dev/null @@ -1,103 +0,0 @@ -#! /bin/sh -# -# [sh -x] spawn [command [argument ...]] -# -# export id to create&destroy or reuse the working directory //proc/$id/. -# this feature is for debug only and marked as deprecated, so don't rely -# on it too hard. -# -spawn() { -  set -euf - -  # establish working subdirectory in //proc.  we're mking only -  # transient dirs, i.e. if we mkdir, then we also defer rmdir. -  if test -n "${id-}"; then -    : "using id=[32;1m$id[m from env" -    wd=$pd/$id -    if ! test -d $wd; then -      : "make transient [32;1m$wd/[m" -      mkdir $wd -      defer rmdir $wd -    elif ! test `ls $wd | wc -l` = 0; then -      : "[31;1m$wd/[;31m is not empty![m" -      exit 23 -    else -      : "reuse existing [32;1m$wd/[m" -    fi -  else -    id=`cd $pd && mktemp -d XXXXXXXXXXXXXXXX` -    wd=$pd/$id -    defer rmdir $wd -    : "made transient [32;1m$wd/[m" -  fi - -  # change to //proc working directory -  cwd="$PWD" -  cd $wd -  defer cd $cwd - -  # create named pipes for the child process's stdio -  mkfifo 0 1 2 -  defer rm 0 1 2 - -  # spawn child process -  ( : "in [32;1m$PWD/[m spawn [32m${*:-[35;1mnothing}[m" -    set +x # disable debug output so we don't clobber 2 -    exec 0>&- 1>&- 2>&- 0<>0 1<>1 2<>2 -    cd "$cwd" -    exec "$@") & -  pid=$! - -  # setup a trap to kill the child process if this (parent) process dies -  defer kill $pid - -  # store misc. info. -  ln -snf $cwd cwd -  echo $id >id -  echo $$ >ppid -  echo $pid >pid -  defer rm cwd id pid ppid - -  # wait for the child process's  -  set +e -  wait $pid -  code=$? -  set -e - -  # the child is already dead -  cancel kill $pid - -  # return the same way wait did -  (exit $code) -} - -# -# defer [command [argument ...]] -# -# Defer execution of a command.  Deferred commands are executed in LIFO -# order immediately before the script terminates.  See (golang's defer -# statement for more information how this should work). -# -defer() { -  defer="$*${defer+ -$defer}" -} - -# -# cancel [command [argument ...]] -# -# Cancel a deferred command.  The arguments have to match exactly a -# prior defer call or else chaos and mayhem shall haunt thee and shi- -# -cancel() { -  defer="`echo "$defer" | grep -Fxv "$*"`" -} - -# setup //proc directory -pd=/tmp/krebs/proc -mkdir -p $pd -test -w $pd - -# setup deferred execution and spawn command -trap 'eval "${defer-}"; defer=' EXIT INT TERM -spawn "$@"  | 
