On 04/03/2017 12:22 PM, Shlomi Fish wrote:
Hi Andy!
On Mon, 3 Apr 2017 09:15:37 +0100 Andrew Beverley <andy@andybev.com> wrote:
On Mon, 3 Apr 2017 11:01:23 +0300 Shlomi Fish wrote:
When running a simple and reduced Dancer 1 application which forks and runs perldoc -f system , I am getting many zombie processes after making requests.
Forking a web app is not as simple as it first seems.
Do you mean forking any web app or just Dancer apps?
You need to take an approach like the following (hopefully the comments will explain without me regurgitating here, but feel free to ask for clarification):
https://github.com/ctrlo/GADS/blob/cb8c9478dee8eac1f40a44486634173bed8d666d/...
I don't understand the code there in part because it uses too many custom APIs like "guard"s and "try". Furthermore, the licence is the AGPLv3 which cannot be used inside my MIT Expat code.
Shlomi, the point is the double fork - I suggest to disregard the code in the second else condition and put your code there :-). Regards Racke
If someone can provide a simple interface to spawn a background child process in Dancer, I will appreciate it. Something like:
use Dancer::Plugin::SpawnProc;
# Inside the handler: dancer_spawn_proc (sub { # I am the child process. system("mpv", 'no-exist.webm'); exit(0); });
==========
Regards,
Shlomi Fish
The key point being that you need to fork both a child and a grand-child in order to correctly reap all the forked processes.
Andy
-- Ecommerce and Linux consulting + Perl and web application programming. Debian and Sympa administration.