hi all,
We are trying to run a process in the background and in the process we call fork ;and wait for the child process to finish .We find that the died = wait(&status); happens after 10 seconds randomly and sometimes completes in time (within 1 sec)
This behavior is seen only when the program is run as a background process. With foreground the functionality is always within 1 sec.
Can anyone please suggest the reason for this random scheduling in Linux - Operating system is CentOS
switch ( pid = fork())
{
case -1:
DbgMsg( DBG_ERR, "Cannot fork for compile!\n");
single--;
return -1;
case 0:
execvp( file, argv);
DbgMsg(DBG_ERR | DBG_COMPILER, "Should never happen\n");
default:
{
waitloop:
died = wait(&status);
if (died == pid)
break;
if (died == -1) {
#if 0 /* on systems that don't map errno to __error() */
extern int errno;
#endif
DbgMsg(DBG_WARNING | DBG_COMPILER, "Compilation error (%s)\n", strerror(errno));
switch (errno) {
case ECHILD:
case EINTR:
break;
default:
DbgMsg( DBG_WARNING, "Unexpected compilation error (%d)\n", errno);
goto waitloop;
}
}
DbgMsg( DBG_WARNING, "Wait returned for other child %x\n", died);
goto waitloop;
}
}
Thanks in advance for any help
Thanks
Vishnu