CGIのレスポンスを返してから、バックグラウンドで処理を続けるには?
子プロセスで実行:
- http://www.stackasterisk.jp/tech/program/perl04_02.jsp
- http://www.sarinaga.com/progtoy/perlcookbooklink.html
- http://www.unix.org.ua/orelly/perl/cookbook/ch16_20.htm
#!/usr/bin/perl eval{ $ppid = $$; #<-親プロセスID $| = 1; # バッファリングの制御。 FORK: { if( $pid = fork ) { print "親プロセスID=$ppid 子プロセスID=$pid"; # 親プロセス close(STDOUT); # apache が終了ステータスを返し、ブラウザが開放される wait; #←子プロセスの回収 } elsif (defined $pid) { # 子プロセス close(STDOUT); # apache が終了ステータスを返し、ブラウザが開放される # # バックグランドで実行する処理 # exit; } elsif ( $! =~ /No more process/) { # プロセスが多すぎる場合 sleep 5; redo FORK; # 5秒後に再実行 } else { # エラーケース die "Can't fork: $\n"; } } # End Of Label:FORK 1; }; if($@){ # close(STDOUT) のあとは標準出力できない。 print "Error! : $@"; }
とりあえずいじょ。
最近目がかゆくてダメだ…疲れ目orストレスor暑さ。
目と歯は大切に!!