天天看點

linux 防止程序雙開,linux-如何避免程序?

我将ZFS遠端複制從主要主機複制到從屬主機,在那裡我在主要主機上運作一個Perl腳本.

對于每個檔案系統,它ssh到遠端主機并以偵聽模式啟動mbuffer,然後腳本繼續執行,然後發送資料.成功時,mbuffer應該自行退出.

問題

通過ssh在遠端主機上啟動mbuffer,然後能夠在腳本中繼續是非常困難的.我最終做了下面可以看到的事情.

問題在于,直到腳本退出,腳本都會留下< defunct>每個檔案系統處理一個.

可以避免< defunct>過程?

sub mbuffer {

my ($id, $zfsPath) = @_;

my $m = join(' ', $mbuffer, '-I', $::c{port});

my $z = join(' ', $zfs, 'receive', , $zfsPath);

my $c = shellQuote($ssh, $::c{slaves}{$id}, join('|', $m, $z));

my $pm = Parallel::ForkManager->new(1);

my $pid = $pm->start;

if (!$pid) {

no warnings; # fixes "exec" not working

exec($c);

$pm->finish;

}

sleep 3; # wait for mbuffer to listen

return $pid;

}