Latest web development tutorials

Управление процессом Perl

Perl вы можете различными способами для создания процесса.

Этот учебник будет обсуждать управление некоторыми процессами.

  • Вы можете использовать специальную переменную$$ или $ process_id, чтобы получить идентификатор процесса.

  • % ENV хэш содержит родительский процесс, который является переменные окружения оболочки в Perl может изменять эти переменные.

  • Выход () обычно используется для выхода из дочернего процесса, дочерний процесс выходит основной процесс выходит в конце концов.

  • Все открытые ручки DUP в функции подпрограммы (), чтобы скопировать все закрыть все ручки процессы не будут влиять на другие процессы.


оператор Открывающая кавычка

Используя оператор обратного апострофа может легко выполнять команды Unix. Вы можете вставить несколько простых команд в анти-кавычки. Выполнение команд будет возвращать результаты:

#!/usr/bin/perl

@files = `ls -l`;

foreach $file (@files){
   print $file;
}

1;

Вышеприведенная программа, выходные результаты являются следующие:

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
……

Системная функция ()

Вы можете также использоватьсистемную функцию ()выполняет команду Unix, команда выполняется непосредственно выход. По умолчанию, ток будет отправлен в точку STDOUT Perl, где, как правило, экран. Вы можете также использовать оператор перенаправления> вывод в указанный файл:

Вышеприведенная программа, выходные результаты являются следующие:

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
……

Обратите внимание, что команда, которую вы должны включить переменные окружения, такие как выход или $ HOME $ PATH, следующим образом:

#!/usr/bin/perl

$PATH = "我是 Perl 的变量";

system('echo $PATH');  # $PATH 作为 shell 环境变量
system("echo $PATH");  # $PATH 作为 Perl 的变量
system("echo \$PATH"); # 转义 $

1;

Вышеприведенная программа, выходные результаты являются следующие:

/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, вилка () используется для создания нового процесса.

Возвращает ребенка в родительский процесс PID, в дочерний процесс возвращает 0. Если ошибка (например, из памяти) произошел возврат UNDEF, и $! Устанавливается на соответствующее сообщение об ошибке.

Он может быть использован в сочетании с вилкой и Exec. Exec процесс выполнения функции, которая завершается после окончания команды в кавычках.

#!/usr/bin/perl

if(!defined($pid = fork())) {
   # fork 发生错误返回 undef
   die "无法创建子进程: $!";
}elsif ($pid == 0) {
   print "通过子进程输出\n";
   exec("date") || die "无法输出日期: $!";
  
} else {
   # 在父进程中
   print "通过父进程输出\n";
   $ret = waitpid($pid, 0);
   print "完成的进程ID: $ret\n";

}

1;

Вышеприведенная программа, выходные результаты являются следующие:

通过父进程输出
通过子进程输出
2016年 6月19日 星期日 22时21分14秒 CST
完成的进程ID: 47117

Если процесс завершается, он посылает сигнал на родительский процесс после того, как CHLD, он станет мертвым процессом, который требует ожидания родительского процесса и waitpid прекращается. Конечно, вы можете также установить $ SIG {CHLD} до IGNORG:

#!/usr/bin/perl

local $SIG{CHLD} = "IGNORE";
 
if(!defined($pid = fork())) {
   # fork 发生错误返回 undef
   die "无法创建子进程: $!";
}elsif ($pid == 0) {
   print "通过子进程输出\n";
   exec("date") || die "无法输出日期: $!";
  
} else {
   # 在父进程中
   print "通过父进程输出\n";
   $ret = waitpid($pid, 0);
   print "完成的进程ID: $ret\n";

}

1;

Вышеприведенная программа, выходные результаты являются следующие:

通过父进程输出
通过子进程输出
2016年 6月19日 星期日 22时30分56秒 CST
完成的进程ID: -1

функция по убийствам

Perl убить ( 'сигнал', ( Список процессов)) посылает сигнал к группе процессов.сигнал представляет собой цифровой сигнал, посылаемый 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             用户定义的信号1
SEGV          11          C             非法内存访问
USR2          12          A             用户定义的信号2
PIPE           13          A             写往没有读取者的管道
ALRM         14          A             来自闹钟的定时器信号
TERM         15          A             终端信号
CHLD          17          B             子进程终止
CONT         18          E             如果被停止则继续
STOP         19          DF            停止进程
TSTP          20          D             tty键入的停止命令
TTIN            21          D             对后台进程的tty输入
TTOU          22          D             对后台进程的tty输出

Следующий пример обрабатывает 104 и 102 для отправки сигнала SIGINT:

#!/usr/bin/perl

kill('INT', 104, 102);
 
1;