---
name: "Proc::WaitStat"
section: "3pm"
platform: "linux"
package: "libproc-waitstat-perl"
version: "1.00-7"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Proc::WaitStat"
---

# Proc::WaitStat(3pm)

Interpret and act on wait() status values

## NAME

Proc::WaitStat - Interpret and act on wait() status values

## SYNOPSIS

```
    $description = waitstat $?;
    exit waitstat_reuse $?;
    waitstat_die $?, 'program-name';
    close_die COMMAND, 'program-name';
```

## DESCRIPTION

This module contains functions for interpreting and acting on wait status values.

Nothing is exported by default.

- **waitstat** *wait-status*

  Returns a string representation of **wait()** status value *wait-status*. Values returned are like `"0"` and `"64"` and `"killed (SIGHUP)"`.

  This function is prototyped to take a single scalar argument.

- **waitstat\_reuse** *wait-status*

  Turn *wait-status* into a value which can be passed to **exit**, converted in the same manner the shell uses.  If *wait-status* indicates a normal exit, return the exit value.  If *wait-status* instead indicates death by signal, return 128 plus the signal number.

  This function is prototyped to take a single scalar argument.

- **waitstat\_die** *wait-status* *program-name*

  **die()** if *wait-status* is non-zero (mentioning *program-name* as the source of the error).

  This function is prototyped to take two scalar arguments.

- **close\_die** *filehandle* *name*

  Close *filehandle*, if that fails **die()** with an appropriate message which refers to *name*.  This handles failed closings of both programs and files properly.

  This function is prototyped to take a filehandle (actually, a glob ref) and a scalar.

## EXAMPLES

```
    close SENDMAIL;
    exit if $? == 0;
    log "sendmail failure: ", waitstat $?;
    exit EX_TEMPFAIL;
    $pid == waitpid $pid, 0 or croak "Failed to reap $pid: $!";
    exit waitstat_reuse $?;
    $output = `some-program -with args`;
    waitstat_die $?, 'some-program';
    print "Output from some-process:\n", $output;
    open PROGRAM, '| post-processor' or die "Can't fork: $!";
    while (<IN>) {
        print PROGRAM pre_process $_
            or die "Error writing to post-processor: $!";
    }
    # This handles both flush failures at close time and a non-zero exit
    # from the subprocess.
    close_die PROGRAM, 'post-processor';
```

## AUTHOR

Roderick Schertler \<*roderick@argon.org*\>

## SEE ALSO

[**perl**(1)](/perl/1.md), [**IPC::Signal**(3pm)](/IPC::Signal/3pm.md).
