[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.10 What's the return value of system/pclose/waitpid?

The return value of system(), pclose(), or waitpid() doesn't seem to be the exit value of my process… or the exit value is shifted left 8 bits… what's the deal?

The man page is right, and so are you! If you read the man page for waitpid() you'll find that the return code for the process is encoded. The value returned by the process is normally in the top 16 bits, and the rest is used for other things. You can't rely on this though, not if you want to be portable, so the suggestion is that you use the macros provided. These are usually documented under wait() or wstat.

Macros defined for the purpose (in ‘<sys/wait.h>’) include (stat is the value returned by waitpid()):

WIFEXITED(stat)

Non zero if child exited normally.

WEXITSTATUS(stat)

exit code returned by child

WIFSIGNALED(stat)

Non-zero if child was terminated by a signal

WTERMSIG(stat)

signal number that terminated child

WIFSTOPPED(stat)

non-zero if child is stopped

WSTOPSIG(stat)

number of signal that stopped child

WIFCONTINUED(stat)

non-zero if status was for continued child

WCOREDUMP(stat)

If WIFSIGNALED(stat) is non-zero, this is non-zero if the process left behind a core dump.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated on September, 10 2007 using texi2html 1.77.