wait
, waitpid
) of Perl do not return EINTR
when receiving a signal.This is a problem if you would want to wait for child processes until receiving a signal. Proc::Wait3 can be a solution, however the module may be hard to install as it is an XS module. It should also be noted that the module provides replacement for
wait
only; no workaround exists for waitpid
.So today I have scrubbed my head wondering if I could come up with a pure-perl solution, and, here it is. The Perl script below launches a worker process (that just sleeps), and waits for the process to complete, or until SIGTERM is being received.
use strict; use warnings; use Errno (); our $got_sigterm = 0; our $sighandler_should_die = 0; # fork a child process that does the task my $child_pid = fork; die "fork failed:$!" unless defined $child_pid; if ($child_pid == 0) { # in child process, do something... sleep 100; exit 0; } $SIG{TERM} = sub { $got_sigterm = 1; die "dying to exit from waitpid" if $sighandler_should_die; }; warn "master process:$$, child process:$child_pid"; # parent process, wait for child exit or SIGTERM while (! $got_sigterm) { if (my_waitpid($child_pid, 0) == $child_pid) { # exit the loop if child died warn "child process exitted"; $child_pid = -1; last; } } if ($child_pid != -1) { warn "got SIGTERM, stopping the child"; kill 'TERM', $child_pid; while (waitpid($child_pid, 0) != $child_pid) { } } sub my_waitpid { my @args = @_; local $@; my $ret = eval { local $sighandler_should_die = 1; die "exit from eval" if $got_sigterm; waitpid($args[0], $args[1]); }; if ($@) { $ret = -1; $! = Errno::EINTR; } return $ret; }
The trick is that
waitpid
is surrounded by a eval
within the my_waitpid
function, and the signal handler calls die
to exit the eval if the $sighandler_should_die
flag is being set. It is also essential to check the $got_sigterm
flag within the eval block after setting the $sighandler_should_die
flag, since otherwise there would be a race condition.By using these tricks it has now become possible to implement process managers in pure-perl!
Hey Guys Must Check these :-
ReplyDeleteI can do that live show
I can do that live telecast
I can do that Show live streaming
muharram 2015 Images
muharram 2015 Hd Wallpapers
Happy muharram 2015 Quotes
Muharram 2015 Slogans
muharram 2015 Karbala sms
Muharram 2015 Quotes
10 muharram 2015 Talwar Matam Videos
Muharram 2015 Zanjeer Juloos Videos
muharram 2015 Poems
Hazrat Hussain Poetry 2015
muharram 2015 Qawwali Mp3
10 Muharram 2015 shayari
Muharram 2015 Status
Labbaik ya hussain mp3 Songs
Hazrat Hussain Hd Images
Happy Childrens Day 2015 Images
Mastizaade Box Office Collection
Mastizaade Funny Scenes
Mastizaade hd Videos
Mastizaade Hot Scenes
Mastizaade Movie Review
Mastizaade Romantic Scenes
Mastizaade Songs
Mastizaade trailer film
World Aids Day 2015 Quotes
World Aids Day 2015 Posters
World Aids Day 2015 Themes
World Aids Day 2015 Slogans
here you guy the best christmas and happy new year 2016 wishes check this out guys: -
ReplyDeleteChristmas Love Quotes
Christmas Love Messages
HAPPY NEW YEAR 2016 WISHES, GREETINGS , THOUGHTS AND STATUS FOR FB
CHRISTMAS LOVE MESSAGES, LOVE QUOTES, CUTE SAYINGS
Merry Christmas Wishes Greetings and Quotes
CHRISTMAS LOVE MESSAGES, LOVE QUOTES, CUTE SAYINGS
fitflops
ReplyDeletelouis vuitton borse
oakley sunglasses cheap
birkin handbags
timberland outlet
discount oakley sunglasses
kd shoes
christian louboutin outlet
coach outlet online
cheap ugg boots
zhi20161216
Sifatnya sulit dibengkokkan, dilas dan dipotong. Kandungan 0,60 % – 1,50 % C Penggunaan :Supplier stainless steel
ReplyDeletePabrik sch 40
Supplier bondek
undangan pernikahan lucu
Pabrik Besi Cnp Profil Baja Gording
Pabrik Besi Siku Baja
Very nice post. I just stumbled up?n your weblog and wished to say that I have really enjoyed browsing ?our blog posts.
ReplyDeleteRegards - www.office.com/setup
I can only express a word of thanks. Because with the content on this blog I can add knowledge I, thank has been sharing this information. Do not forget to visit our website to share information and knowledge about health.|
ReplyDeleteCara Mengobati penyakit kanre pali |
Obat Filariasis Herbal |
Thank you very useful information admin, and pardon me permission to share articles here
ReplyDeletemay help :
Cara Menghilangkan Benjolan Di Belakang
Telinga
Cara mengobati pengapuran tulang lutut
Cara Menyembuhkan Gidu Secara Alami
Nice to be visiting your blog again, it has been months for me. Well this article that i’ve been waited for so long. I need this article to complete my assignment in the college, and it has same topic with your article. Thanks, great share :
ReplyDeletecara mengobati kencing manis
cara mengobati gondok secara alami