スポンサーリンク

Perlでプロセスを中断(サスペンド)したり再開する方法について説明します。

UNIXでは、プロセスを中断させたり、中断しているプロセスを再開することが可能です。
稼働中のプロセスにシグナルを送ることでコントロールすることが可能です。

プロセスを中断するには、シグナルSIGTSTPを送ります。
プロセスを再開するには、シグナルSIGCONTを送ります。


exec.pl

perlのexec.plで子プロセスを生成し、子プロセスでphpスクリプトを実行します。
親プロセスのexec.plから子プロセスのpidに対して、SIGTSTPを送信し、phpの実行を止め、しばらくsleepしたのちにphpを再開するためにSIGCONTを送信します。

#!/usr/local/bin/perl -w
use strict;
use POSIX qw(SIGTSTP SIGCONT);

sub main
{
	my $pid = fork();

	if ($pid == 0) {
		exec '/usr/X11R6/bin/php', '/tmp/foo.php';
		exit;
	}

	sleep(5);

	kill SIGTSTP , $pid;
	print "stop $pid\n";
	sleep (5);
	print "start $pid\n";
	kill SIGCONT , $pid;

	wait;

	exit (0);
}
& main;


foo.php

/tmp/foo.logに1秒ごとに $i を表示するだけのプログラムです。
<?php

$fp = fopen("/tmp/foo.log", "a");

for ($i = 0; $i < 300; $i++)
{
	//echo "$i\n";
	fwrite($fp, "$i\n");
	sleep (1);
}
fclose($fp);
?>

実行方法
2つターミナルを用意してください。

1つめのターミナルで下記コマンドを実行します。

perl exec.pl


2つめのターミナルで下記コマンドを実行します。

tail -f /tmp/foo.log


exec.pl がSIGTSTPを送信すると、2つめのターミナルのtailコマンドで監視しているfoo.logが更新されなくなります。
exec.plがsleepから復帰し、phpのコマンドに再開のシグナルを送信すると再び、foo.logが更新されるようになります。

関連
[2008-07-07-1] perl signal SIGCHLDを受け取る

参照しているページ (サイト内): [2009-04-27-1] [2008-08-25-1] [2008-08-24-2] [2008-08-24-1] [2008-07-07-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー