perlプログラムを介して外部プロセスを実行すると、perlプログラムはプロセスの親のままになります。プロセス管理を容易にします。
system('sleep 3000'); # perl is still the parent
ただし、プログラムがプロセスの終了を待つ必要がないように、プロセスをバックグラウンドで実行しようとすると...
system('sleep 3000 &');
このsleep
プロセスはシステムinit
プロセスによって採用され、それを実行したプログラムとは関連付けられなくなります。
この状況でプロセス管理を処理する適切な方法は何ですか。プロセスの実行をバックグラウンドでエミュレートしながら、プロセスの祖先を維持するにはどうすればよいですか?
あなたが使用することができますthreads
、
use threads;
my $t = async { system('sleep 3000'); };
# do something in parallel ..
# wait for thread to finish
$t->join;
または fork
sub fasync(&) {
my ($worker) = @_;
my $pid = fork() // die "can't fork!";
if (!$pid) { $worker->(); exit(0); }
return sub {
my ($flags) = @_;
return waitpid($pid, $flags // 0);
}
}
my $t = fasync { system('sleep 3000'); };
# do something in parallel ..
# wait for fork to finish
$t->();
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加