В Perl можно создавать процессы разными способами.
В этом руководстве будут обсуждаться некоторые методы управления процессами.
Вы можете получить идентификатор процесса, используя специальную переменную $$ или $PROCESS_ID .
Хэш %ENV хранит переменные среды в родительском процессе, которым является оболочка. Эти переменные можно изменить в Perl.
exit() обычно используется для выхода из дочернего процесса. Основной процесс завершается после завершения всех дочерних процессов.
Все открытые дескрипторы будут скопированы функцией dup() в подпрограмме, а все дескрипторы, закрытые процессом, не повлияют на другие процессы.
Команды Unix можно легко выполнить с помощью оператора обратного кавычка. В обратные кавычки можно вставить несколько простых команд. После выполнения команды будут возвращены результаты:
#!/usr/bin/perl@files = `ls -l`;foreach $file (@files){ print $file;}1;
Выполнение вышеуказанной программы дает следующие результаты:
drwxr-xr-x 3 root root 4096 14 сентября 06:46 9-14drwxr-xr-x 4 root root 4096 13 сентября 07:54 android-rw-r--r-- 1 root root 574 17 сентября 15:16 index .htmdrwxr-xr-x 3 544 401 4096 6 июля 16:49 MIME-Lite-3.01-rw-r--r-- 1 корень root 71 17 сентября 15:16 test.pl……
Вы также можете использовать функцию system() для выполнения команд Unix. Выполнение этой команды приведет к непосредственному выводу результатов. По умолчанию он будет отправлен в то место, куда в данный момент указывает STDOUT Perl, обычно это экран. Вы также можете использовать оператор перенаправления > для вывода в определенный файл:
Выполнение вышеуказанной программы дает следующие результаты:
drwxr-xr-x 3 root root 4096 14 сентября 06:46 9-14drwxr-xr-x 4 root root 4096 13 сентября 07:54 android-rw-r--r-- 1 root root 574 17 сентября 15:16 index .htmdrwxr-xr-x 3 544 401 4096 6 июля 16:49 MIME-Lite-3.01-rw-r--r-- 1 корень root 71 17 сентября 15:16 test.pl……
Вам необходимо обратить внимание на вывод команды, включая переменные среды, такие как $PATH или $HOME, как показано ниже:
Выполнение вышеуказанной программы дает следующие результаты:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbinЯ — переменная Perl /usr/local/bin:/bin:/usr/bin:/ usr /local/sbin:/usr/sbin:/sbin
Функция Perl fork() используется для создания нового процесса.
Возвращает PID дочернего процесса в родительском процессе и 0 в дочернем процессе. Если возникает ошибка (например, недостаточно памяти), возвращается undef, а $! присваивается соответствующее сообщение об ошибке.
fork можно использовать совместно с exec. Процесс завершается после того, как функция exec выполнит команду в кавычках.
Выполнение вышеуказанной программы дает следующие результаты:
Вывод через родительский процесс Вывод через дочерний процесс Идентификатор процесса завершен в воскресенье, 19 июня 2016 г., 22:21:14 Идентификатор процесса CST: 47117
Если процесс завершается, он отправит сигнал CHLD родительскому процессу, и он станет процессом-зомби. Родительский процесс должен использовать wait и waitpid для его завершения. Конечно, вы также можете установить для $SIG{CHLD} значение IGNORG:
Выполнение вышеуказанной программы дает следующие результаты:
Вывод через родительский процесс Вывод через дочерний процесс Идентификатор процесса завершен в воскресенье, 19 июня 2016 г., 22:30:56 Идентификатор процесса CST: -1
Perl kill('signal', (Process List)) отправляет сигнал группе процессов. signal — отправленный цифровой сигнал, 9 — завершить процесс.
Во-первых, давайте посмотрим на часто используемые сигналы в Linux, см. следующий список:
Объяснение названия сигнала и аннотации значений ———————————————————————————————— ——————————— ———HUP 1 A Обнаружено зависание INT 2 A Прерывание с клавиатуры QUIT 3 A Останов с клавиатуры ILL 4 A Недопустимая команда ABRT 6 C Сбой FPE 8 C Плавающая точка Ненормальный KILL 9 Сигнал терминала AF USR1 10 A Определяемый пользователем сигнал 1SEGV 11 C Недопустимый доступ к памяти USR2 12 A Определяемый пользователем сигнал 2PIPE 13 A Запись в канал ALRM без считывателя 14 A Сигнал таймера TERM от будильника 15 A Терминальный сигнал CHLD 17 B Завершение дочернего процесса CONT 18 E Продолжить STOP, если остановлен 19 DF Остановить процесс TSTP 20 D Введите команду остановки TTIN на терминале 21 D Введите TTOU на терминале фонового процесса 22 D вывод tty в фоновый процесс
В следующем примере сигналы SIGINT отправляются процессам 104 и 102: