Help: /bin/ping problem with Red Hat

Jeff Epler jepler at unpythonic.net
Wed Mar 12 11:32:25 EST 2003


system(), spawn*() and/or fork+exec from a Python thread on Linux tends to do
strange things.  I believe it has to do with changes to signal handling
done by linux pthreads implementation which are not undone when a new
process is exec()'d.

The following program sets all signals back to the default and then
executes the given program.  Using a wrapper like this might let the
system()'d program execute properly (system("xxx") becomes system("rehup
xxx"))

#include <signal.h>

int main(int c, char **v) {
    int i;
    sigset_t sset;

    sigemptyset(&sset);
    if (sigprocmask(SIG_SETMASK, &sset, 0) == -1) perror("sigprocmask");
    for(i=0; i<32; i++) {
	if(signal(i, SIG_DFL) == SIG_ERR) perror("signal");
    }
    execv(v[1], &v[1]);
    perror("execv");
    return 1;
}





More information about the Python-list mailing list