Tutorial :Non-blocking version of system()


I want to launch a process from within my c program, but I don't want to wait for that program to finish. I can launch that process OK using system() but that always waits. Does anyone know of a 'non-blocking' version that will return as soon as the process has been started?

[Edit - Additional Requirement] When the original process has finished executing, the child process needs to keep on running.


One option is in your system call, do this:

 system("ls -l &");  

the & at the end of the command line arguments forks the task you've launched.


Why not use fork() and exec(), and simply don't call waitpid()?

For example, you could do the following:

// ... your app code goes here ...  pid = fork();  if( pid < 0 )      // error out here!  if( !pid && execvp( /* process name, args, etc. */ )      // error in the child proc here!  // ...parent execution continues here...  


The normal way to do it, and in fact you shouldn't really use system() anymore is popen.
This also allows you to read or write from the spawned process's stdin/out

edit: See popen2() if you need to read and write - thansk quinmars


You could use posix_spawnp() function. It's much similar to system() than the fork and exec* combination, but non-blocking.


In the end, this code appears to work. Bit of a mis-mash of the above answers:

pid = fork();    if (!pid)  {      system("command here &");  }    exit(0);  

Not quite sure why it works, but it does what I'm after, thanks to everyone for your help

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »