Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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)

NAME | SYNOPSIS | DESCRIPTION | OPTIONS | EXAMPLES | AUTHOR | SEE ALSO

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=runtrap&sektion=8&manpath=FreeBSD+12.2-RELEASE+and+Ports>

home | help