
Perl Cookbook
(English, Kindle Ed.)
Christiansen / Torkington
[ˮ��: Perl���å��֥å�]
solo �Ȥ���̾���� perl script ��App::solo �Ȥ���̾�ǥ�꡼�����ޤ�����
�ץ������֤δ����դ���¾���å� - (��)���
- �ץ������֤���¾Ū�¹Ԥ����椷����
- ������ַвᤷ����¹ԤǤ���褦�ˤ�����
������Ф����̲����Ǥ���
�ʲ���POD�ξ�����
NAME solo - run only one process up to given timeout. SYNOPSIS solo -t seconds [-P pidfile] [-K signal] cmd ... DESCRIPTION cmd�ʹߤǻ��ꤵ�줿���ޥ�ɤ򡢰��������¾Ū�˼¹Ԥ��ޤ��� ������֤�᤮���饳�ޥ�ɤ�SIGTERM������ޤ��� cmd�����Ǥ˼¹���ξ�硢�¹���Υ��ޥ�ɤ�PID�����ä� ���顼��å���������Ϥ��줿�塢cmd��¹Ԥ��뤳�Ȥʤ���λ���ޤ��� ����Υ��å���󤬰۾ェλ���Ƥ������ˤϡ�����Υ��å����ν�λ��� �򥨥顼��å������Ȥ��ƽ��Ϥ�����cmd��¹Ԥ��뤳�Ȥʤ���λ���ޤ��� ������ϥ����ॢ���Ȥξ���ޤߤޤ��� -f ����Υ��å���󤬰۾ェλ���Ƥ������ˤ⶯��Ū�˥��ޥ�ɤ�¹Ԥ��ޤ��� ���ξ��ˤ⥻�å���󤬿ʹ���ξ��ˤ�solo�ϼ¹Ԥ���ݤ�������α�դ��� ���������� -t seconds ���֤��äǻ��ꤷ�ޤ�����ά���줿��硢86400(=1��)�����ꤵ��ޤ��� Time::HiRes�Τ������Ǿ������ʲ��λ�����ǽ�Ǥ��� -P pidfile PID�ե�����ΰ��֤���ꤷ�ޤ����ǥե���ȤǤ� root���¤Ǽ¹Ԥ��줿���� "/var/run/cmd.pid" �򡢤���ʳ��Ǥ�"/var/tmp/cmd.pid"���Ѥ��ޤ� -K signal �ǥե���Ȥ�SIGTERM�ʳ��Υ����ʥ����ꤷ�ޤ����¹���
% cat sleep.pl #!/usr/bin/env perl use strict; use warnings; my $seconds = shift || 1; while ($seconds > 0) { print $seconds--, "\n"; sleep 1; } % ./sleep.pl 3 3 2 1 % solo -t 2 ./sleep.pl 3 3 2 ./sleep.pl: Operation timed out % solo -t 2 ./sleep.pl 3 ./sleep.pl: Last session ended abnormally: Operation timed out (60). % solo -f -t 4 ./sleep.pl 3 3 2 1 % solo ./sleep.pl 3 3 2 1
���󥹥ȡ���
cpanminus��git���б������������ǡ��ʲ��Τ褦�ˤ��ư�ȯ�ǥ��󥹥ȡ���Ǥ��ޤ���
% cpanm git://github.com/dankogai/p5-app-solo.git
miyagawa++;
�����奢�뤫��Unix��¸����䶯�����ޥ�ɤʤΤǡ�CPAN�ˤϾ夲�ʤ��Ǥ����ޤ���
�����Ȥ�����ͳ
�㤨�С��ե����륪���С���¹Ԥ��륹����ץȤϡ����٤�¹ԤǤ���ȥե����륪���С�/�Хå��򷫤��֤��ƥե�åפ���Τǡ����٥ե����륪���С������������֤ϼ¹ԤǤ��ʤ��褦�ˤ�����
�Ȥ������ȤǤ���С����������Ϥ��Υ��ޥ�ɤϤ��⤽��ʣ���¹ԤǤ��ʤ��褦�ˤ��������褤�Ǥ������դ˰�����֤�Ф��˽�λ�����ΤǤ����¨�¤˺Ƽ¹ԤǤ���褦�ˤʤäƤ���Фʤ�˾�ޤ����櫓�Ǥ���
solo�Ǥϡ�����򤳤Τ褦�ˤ��Ƽ¹Ԥ��Ƥ��ޤ���
- PID�ե����������å���¸�ߤ��Ƥ���Х��顼��å�������ɽ�����ƽ�λ��
- fork�����塢���ޥ�ɤ�ҥץ�������exec����PID�ե���������
- �ƥץ������ϡ���ʬ���Ȥ�alarm�򤫤����塢�ҥץ�������wait��
- ��ʬ���Ȥ�alarm�������ä��顢¨�¤˻ҥץ�������kill
- PID�ե�����������ƽ�λ��
�ʲ������Υ������ʬ�ˤʤ�ޤ���
eval { local $SIG{ALRM} = sub { die ETIMEDOUT, "\n" }; alarm $timeout; $cpid = fork(); die $! unless defined $cpid; if ($cpid) { print {$pidfh} $cpid, "\n"; close $pidfh; wait; } else { exec $cmd, @ARGV; } alarm 0; }; cleanup(($? || $@);
�¤Ϥ��졢lleval�Ǥ�ȤäƤ���ƥ��˥å��ǡ�Perl Cookbook����16�Ϥˤ�ܤäƤ��ޤ���IPC����ߤξ�����񤷤���˥ͥåȤǤ�빽õ���ˤ����Τǡ������긵�ˤ����Ƥ����Ƚ������ޤ����Ѹ��Kindle�ǤǤ�2,000�ߤ��ڤäƤޤ�����
Enjoy!
Dan the Man with Too Many Processes to Kill
���Υ֥����˥����Ȥ���ˤ�����������ɬ�פǤ���
��������������
���ε����ˤϵ��ĥ桼�����������Ȥ��Ǥ��ޤ���