Я использую Proc::Background
для запуска определенной пользователем программы из Tk GUI, чтобы графический интерфейс не зависал из-за вызова system
.Я хочу иметь возможность запускать пользовательскую программу из каталогов, которые отличаются от расположения этого сценария Perl.
Возможно ли это?Есть ли другой модуль, который я должен использовать?Я хочу
- Запустить процесс асинхронно.
- Уметь определить, запущен ли процесс.
- Уметь убить процесс.
- Поддержка Unix / Linux и Win32.
- Возможность указать текущий рабочий каталог процесса.
Proc::Background
выполняет все эти запросы, кроме #5, по крайней мере, насколько я могу судить.
Редактировать: 22 апреля 2011
Я попробовал Forks :: Super, по предложению, но я не мог получить вещиработает правильно.Например, я хочу наблюдать за сигналом, чтобы убить / прервать процесс.Я использую что-то вроде:
my $pid = fork { dir => $my_dir, cmd => [ $my_cmd, $my_args ] };
my $ProcessObj = Forks::Super::Job::get($pid);
while( $ProcessObj->is_active() ) {
if( $run_cmd_die == 1 ) {
$ProcessObj->kill(1);
}
}
Это никогда не выйдет из цикла while.
Мое окончательное решение - изменить Proc::Background
, чтобы удовлетворить мои потребности.Я добавил новую необязательную запись в хэш опций и передал хэш опций в подпрограммы _new
для Win32 и Unix.Затем я могу предоставить каталог для вызова Win32 :: Process :: Create для Win32 и использовать chdir для Unix.