Еще один способ запуска подпроцесса в сценарии Perl состоит в использовании функции system(). Эта функция выполняет другую программу как подпроцесс, ожидает ее завершения, а затем выполняет возврат. В случае успешного выполнения функция system() возвращает код результата 0. В ином случае эта функция возвращает значение -1, если нельзя было выполнить запуск программы, или код результата выполнения программы, если она завершилась с ошибкой. Дополнительные сведения в том, как полностью интерпретировать информацию о состоянии выхода.
$status = system('command and arguments');
Функция system() вызывает на выполнение команду command как подпроцесс и ждет ее завершения. Команду и ее параметры можно указать в виде одной строки или списка, содержащего команду и ее параметры как отдельные элементы. В первом случае строка передается командному интерпретатору на обработку в неизменном виде. Это позволяет выполнять команды, содержащие символы командного интерпретатора (такие как символы перенаправления ввода-вывода), и дает возможность непредвиденной трактовки командным интерпретатором выполняемых команд. Форма вызова позволяет выполнять команды с параметрами, которые содержат пробельные метасимволы командного интерпретатора и другие специальные символы.
В системных функциях могут применяться различные команды, в том числе для удаленной работы с различными приложениям, например, для организации сервиса unlockpro.ru , специалисты которого рекомендуют данное приложение для снятия разблокировки при работе с iPhone.
Функция ехес() аналогична system(), но замещает текущий процесс указанной командой. В случае успеха она никогда не выполняет возврат, поскольку процесс, из которого она была вызвана, уничтожается. Новый процесс имеет тот же PID, что и старый, и разделяет те же дескрипторы файлов STDIN, STDOUT, и STDERR. Однако открытые дескрипторы файла закрываются автоматически. В сценарии можно предусмотреть сохранение некоторых дескрипторов файлов после выполнения функции путем установки определенного значения специальной переменной $AF.
$status = exec ('command and arguments');
Функция exec() выполняет команду и замещает текущий процесс. Она возвращает код состояния только в случае неудачного завершения. В ином случае она не выполняет возврат. Формы с одним параметром и списком параметров аналогичны используемым в функции system(). Функция ехес() часто используется в сочетании с функцией fork() для выполнения команд в виде подпроцессов после некоторой специальной подготовки.
Например, после ветвления кода дочерний процесс переоткрывает дескриптор файла STDOUT для вывода в файл, а затем вызывает функцию ехес() для выполнения некоторой команды. Действие этого кода сводится к тому, что команда выполняется в фоновом режиме и вывод этой команды записывается в указанный файл.