.... char **Genvp=0; .... void restart_self(int something){ char*args[6]; char arga[512],argb[512]; int ret; args[0]="/usr/bin/valgrind"; args[1]="./feedmain"; args[2]="-restart"; args[3]=arga; args[4]=argb; args[5]=0; printf("'restarting' program\n"); for(int x=0;x<200;x++){ if (clients[x]>=0) { close(clients[x]); clients[x]=-1; } } snprintf(arga,500,"%d",feedoutfd); snprintf(argb,500,"%d",feedinfd); system("make"); ret=execve("/usr/bin/valgrind",args,Genvp); if (ret){ printf("ERROR %d on execve in feedmain\n",ret); } } ... int main(int argc,char *argv[],char* envp[]){ fd_set reads,write,error; int run=1,clientc=0,startup=-1; char buff[1024]; struct timeval tv; Genvp=envp; signal(SIGHUP,restart_self); ...