Latest web development tutorials

gestão de processos de Perl

Perl você pode em maneiras diferentes de criar um processo.

Este tutorial irá discutir a gestão de alguns processos.

  • Você pode usar a variável especial$$ ou US $ PROCESS_IDpara obter o ID do processo.

  • % ENV de hash detém o processo pai, que é as variáveis ​​de ambiente shell em Perl pode modificar essas variáveis.

  • exit () é normalmente usado para sair de um processo filho, o processo filho sai do processo principal sai depois de tudo.

  • Todos os identificadores abertos são dup na função de sub-rotina () para copiar todos fechar todos os identificadores processos não afetará outros processos.


operador de crase

Usando o operador de crase pode facilmente executar comandos Unix. Você pode inserir alguns comandos simples no processo anti-aspas. execução do comando retorne resultados:

#!/usr/bin/perl

@files = `ls -l`;

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

1;

O programa acima, os resultados da saída são os seguintes:

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
……

função system ()

Você também pode usar a funçãosystem () executa o comando Unix, o comando é executado diretamente saída.Por padrão, o atual será enviada ao ponto de STDOUT do Perl, onde, normalmente tela. Você também pode usar o operador de redirecionamento> saída para o arquivo especificado:

O programa acima, os resultados da saída são os seguintes:

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
……

Observe que o comando é necessário incluir variáveis ​​de ambiente, como a saída ou $ HOME $ PATH, como segue:

#!/usr/bin/perl

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

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

1;

O programa acima, os resultados da saída são os seguintes:

/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

função fork ()

função forquilha Perl () é usada para criar um novo processo.

Retorna a criança no PID do processo pai, no processo filho retorna 0. Se um erro (por exemplo, falta de memória) ocorreu retornos undef e $! Está definido para a mensagem de erro correspondente.

Ele pode ser usado em conjunto com a forquilha e Exec. processo exec execução da função que já foi concluída após o término do comando entre aspas.

#!/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;

O programa acima, os resultados da saída são os seguintes:

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

Se a saída do processo, ele envia um sinal para o processo pai depois CHLD, ele se tornará um processo mortos que requer uma espera de processo pai e waitpid encerrado. Claro, você também pode definir $ SIG {CHLD} para 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;

O programa acima, os resultados da saída são os seguintes:

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

função da matança

Perl mortes ( "sinal", ( lista de processos)) envia um sinal para um grupo de processos.sinal é um sinal digital enviado 9 para matar o processo.

Primeiro, olhe para o sinal Linux comumente usado, veja a lista abaixo:

信号名          值          标注          解释
————————————————————————————————————————————————————————————
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输出

O exemplo a seguir processa 104 e 102 para enviar o sinal SIGINT:

#!/usr/bin/perl

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