То есть вы пытаетесь выполнить программу в своем скрипте? exec
вероятно, не то, что вы хотите. exec
ведет себя как C exec
: то, что называется заменяет ваш текущий процесс; чтобы продолжить, вам нужно сделать что-то вроде fork
, чтобы сохранить текущий процесс при выполнении другого.
Но хорошие новости! Это все существует во встроенном system
.
Действует точно так же, как exec LIST, за исключением того, что сначала выполняется форк, и родительский процесс ожидает завершения дочернего процесса.
Вот как это выглядит:
use 5.012; # or use 5.012 or newer
use warnings;
... # some part of my program
system($my_command, $arg1, $arg2); # forks, execs, returns.
END {
# still gets called because you never left the script.
}
Если вам абсолютно необходимо использовать exec
, вы должны автоматически вызвать процедуру очистки. Чтобы узнать больше о END
, см. perldoc perlmod для получения полной информации. Суть этого: END
- это один из нескольких типов блоков кода, который выполняется на определенном этапе выполнения скрипта. Они НЕ подпрограммы. Однако вы можете выполнить любой код, который вы хотите в этих подпрограммах. Так что вы можете сделать:
sub cleanup { ... } # your cleanup code
sub do_exec {
cleanup();
exec( ... );
}
END {
cleanup();
}
и тогда вы знаете, что ваш код очистки будет выполнен при выходе из скрипта ИЛИ при выполнении вашего exec.