persistent process supervision
runtrap(8)                         runtools                         runtrap(8)



NAME
       runtrap - run a program with a signal trapper

SYNOPSIS
       runtrap [-hV] id trapper program [ args ...  ]

DESCRIPTION
       runtrap  starts program with any args and monitors it as a long-running
       process.  If runtrap notices that program terminates, it restarts it.

       Whenever runtrap itself receives any signal it can  catch,  it  invokes
       the argument given by trapper in this form:

              trapper ``trap'' id pid signum signame

       Where:

              trapper

                     The  name of an executable specified in the trapper argu-
                     ment on the command-line.

              ``trap''

                     The verbatim string ``trap''.

              id

                     A simple string specified in the id argument on the  com-
                     mand-line.

              pid

                     The process ID of the program that runtrap is monitoring.

              signum

                     The numeric decimal representation of the signal received
                     by runtrap.

              signame

                     The symbolic name for the signal received by runtrap.

       Presumably  trapper is a short-running program designed to perform some
       special handling of signals destined for program.  After invoking trap-
       per,  runtrap waits for it to complete and then resumes monitoring pro-
       gram.

       If runtrap receives a SIGTERM, it flags itself to terminate.   It  then
       invokes  trapper  as above with SIGTERM arguments.  When program termi-
       nates, runtrap itself then exits normally.

OPTIONS
       -h     Help.  Print a brief usage message to stderr and exit.

       -V     Version.  Print the version number to stderr and exit.

EXAMPLES
       runtrap is designed for use in perpetrate(5)  runscripts  for  services
       that  need  special  signal  handling.   The example below shows how an
       rc.main runscript may be multiplexed to handle ``trap'' targets:

              #!/bin/sh
              exec 2>&1

              TARGET=${1}
              SVNAME=${2}

              start() {
                echo "starting ${SVNAME} ..."
                exec runtrap ${SVNAME} ./rc.main /usr/sbin/foo -f
              }

              reset() {
                echo "resetting ${SVNAME} ..."
                #...
              }

              trap() {
                SVPID=${3}
                SIGNUM=${4}
                SIGNAME=${5}
                echo "trapping ${SVNAME} for signal ${SIGNAME} ..."
                kill -${SIGNUM} ${SVPID}
              }

              eval ${TARGET} "$@"

              ### EOF

AUTHOR
       Wayne Marshall, http://b0llix.net/perp/

SEE ALSO
       runtools_intro(8), runargs(8), runargv0(8), runchoom(8),  rundetach(8),
       rundeux(8),    runenv(8),    runfile(8),    runlimit(8),    runlock(8),
       runpause(8),   runsession(8),    runtool(8),    runuid(8),    perpd(8),
       perpetrate(5)



runtools-2.07                    January 2013                       runtrap(8)