Start background process/daemon from CGI script

后端 未结 10 1172
北恋
北恋 2020-12-10 02:02

I\'m trying to launch a background process from a CGI scripts. Basically, when a form is submitted the CGI script will indicate to the user that his or her request is being

10条回答
  •  悲哀的现实
    2020-12-10 02:35

    There are situations where passing work off to a daemon or cron is not appropriate. Sometimes you really DO need to fork, let the parent exit (to keep Apache happy) and let something slow happen in the child.

    What worked for me: When done generating web output, and before the fork:

    fflush(stdout), close(0), close(1), close(2); // in the process BEFORE YOU FORK

    Then fork() and have the parent immediately exit(0);

    The child then AGAIN does close(0), close(1), close(2); and also a setsid(); ...and then gets on with whatever it needs to do.

    Why you need to close them in the child even though they were closed in the primordial process in advance is confusing to me, but this is what worked. It didn't without the 2nd set of closes. This was on Linux (on a raspberry pi).

提交回复
热议问题