OK, I found the problem in upstream source code : all you have to do is to replace each "return()" calls by "exit()" calls in main function.
I attached a small patch to this email, changing the 2 calls I found in pxe.cc. Regards,
diff -urN pxe-1.4.2.old/pxe.cc pxe-1.4.2.new/pxe.cc --- pxe-1.4.2.old/pxe.cc 2005-11-01 20:49:26.000000000 +0100 +++ pxe-1.4.2.new/pxe.cc 2005-11-01 20:49:58.000000000 +0100 @@ -263,7 +263,7 @@ if(-1 == chk) { std::cerr << "PXE daemon already running\n"; - return(-1); + exit(-1); } // set the UID/GID to a low user @@ -334,5 +334,5 @@ StartPxeService(configfile); } - return(0); + exit(0); }