Вы получаете -1, потому что вы устанавливаете $SIG{CHLD}
в IGNORE
.Делая это, вы убиваете способность qx
захватывать код выхода tar
... он умрет без уведомления родителя (вашего дочернего процесса).
Это достаточно просто для тестированияout:
perl -e '$SIG{CHLD} = "IGNORE"; system("ps"); print "Finished with $?\n";
Это дает -1.
perl -e 'system("ps"); print "Finished with $?\n";
Это дает 0.
Если вам действительно нужен $SIG{CHLD} = 'IGNORE'
, тогда просто $SIG{CHLD} = 'DEFAULT'
доВаш qx
вызов.
Кроме того, убедитесь, что вы используете полный путь к tar
(например, /bin/tar
) на тот случай, если на вашем пути нет /bin
, и этоне в состоянии выполнить.Тем не менее, я предполагаю, что это нормально, так как вы ничего не сказали о том, что ваш tar-файл не создается.