Fork a child process???Howto?


I have written a module to do socket programming. The module resides in UNIX server. It will listen to a port and response to client request. Basically, I have completed the basic functions.

The server process will accept input from client (NT) and process the data accordingly and then write back to the client the end result.

So, I need to create some sort like a server daemon ...

First, the server process will be started. Any request from client will be served by a child process spawned from the parent process. The child process will send the end result to client upon finishing the data (input from client) processing and exit. Meanwhile the server will listen to the next request.

Pls refer any useful links / examples in order for me to achive this.

Who is Participating?

Improve company productivity with a Business Account.Sign Up

pzpnConnect With a Mentor Commented:
The best way to get your main server process to start automatically is to use inetd. With this you can set the internet daemon to listen on a specific port and when a message is sent to that port inetd will start up a pre-defined application (in this case your main server app).

To do this you will have to modify a couple of files. First, you will need to modify the inetd.conf file. This is usually /etc/inetd.conf but if it is not there you can use the UNIX whereis command to find it. In this file you need to add service name, socket type, protoco, {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]], user[:group][/login-class], server program, server program arguments. Just follow the format of the other entries in this file.

You must also edit the /etc/services to add the name of your service.

For more information look up inetd in the UNIX man pages or, if you haven't got then, which I haven't :(, follow this link:

Hopefully this will help.


qiang8Author Commented:
My main question is how to create a daemon that is able to serve the clients' request ... Thanks.
qiang8Author Commented:
Can I use popen to carry out something after fork process??? All examples that I have seen are using execlp or execvp ... Pls advise and thanks.
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

You need to fork() your parent process. After this is called, the newly forked process will be an exact copy of the parent process. You can therefore use the data to service the request. It is necessary after the fork to check whether you are in the parent, in which case you go on to listen for more requests, or whether you are in the child, in which case you service the request and _exit.

To find out whether you are in the child or the parent, check the return value of fork(), i.e.

int iReturnCode = fork();

if(-1 == iReturnCode)
     //The process has failed to fork....
else if(0 == iReturnCode)
     //We are in the child process
     //Service the request....
     //We are in the parent and iReturnCode is the
     //process id of the child...
     //Continue listening for new requests....

Hope this helps.
Yes. You only need to call exec (whatever variant) if you want to start a totally new executable. e.g. if you have one executable listening for a request, call it WaitForRequest and another that services requests, call it ServiceRequest, then you have to call exec to start Service request. Otherwise, if it is all done in the same executable, but you check to see which part of the code will be executed next by checking whether you are in the parent or child, then exec does not have to be called.
qiang8Author Commented:
I have tried the fork process with popen (I save the output to a buffer, pointed to by a file pointer) and successfully. So, my main concern is how to create daemon which will be started automatically upon activation. Any examples on the internet is appreciated. Any example on exec is welcome too.

Sorry for not making the question clear at the beginning. Thanks.
Dear qiang8

I think you forgot this question. I will ask Community Support to close it unless you finalize it within 7 days. You can always request to keep this question open. But remember, experts can only help you if you provide feedback to their questions.
Unless there is objection or further activity,  I will suggest to accept


comment(s) as an answer.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.