Você pode criar processos de diferentes maneiras em Perl.
Este tutorial discutirá alguns métodos de gerenciamento de processos.
Você pode obter o ID do processo usando a variável especial $$ ou $PROCESS_ID .
O hash %ENV armazena as variáveis de ambiente no processo pai, que é o shell. Essas variáveis podem ser modificadas em Perl.
exit() geralmente é usado para sair de um processo filho. O processo principal é encerrado após a saída de todos os processos filhos.
Todos os identificadores abertos serão copiados pela função dup() na sub-rotina e todos os identificadores fechados pelo processo não afetarão outros processos.
Comandos Unix podem ser facilmente executados usando o operador backtick. Você pode inserir alguns comandos simples em crases. Após a execução do comando, os resultados serão retornados:
#!/usr/bin/perl@files = `ls -l`;foreach $arquivo (@files){ print $arquivo;}1;
Executando o programa acima, os resultados de saída são os seguintes:
drwxr-xr-x 3 raiz raiz 4096 14 de setembro 06:46 9-14drwxr-xr-x 4 raiz raiz 4096 13 de setembro 07:54 android-rw-r--r-- 1 raiz raiz 574 17 de setembro 15:16 índice .htmdrwxr-xr-x 3 544 401 4096 6 de julho 16:49 MIME-Lite-3.01-rw-r--r-- 1 root root 71 17 de setembro 15:16 test.pl…
Você também pode usar a função system() para executar comandos Unix. A execução deste comando produzirá os resultados diretamente. Por padrão, ele será enviado para o local onde o STDOUT do Perl aponta atualmente, que geralmente é a tela. Você também pode usar o operador de redirecionamento > para gerar saída para um arquivo específico:
Executando o programa acima, os resultados de saída são os seguintes:
drwxr-xr-x 3 raiz raiz 4096 14 de setembro 06:46 9-14drwxr-xr-x 4 raiz raiz 4096 13 de setembro 07:54 android-rw-r--r-- 1 raiz raiz 574 17 de setembro 15:16 índice .htmdrwxr-xr-x 3 544 401 4096 6 de julho 16:49 MIME-Lite-3.01-rw-r--r-- 1 root root 71 17 de setembro 15:16 test.pl…
Você precisa prestar atenção à saída do comando, incluindo variáveis de ambiente como $PATH ou $HOME, conforme mostrado abaixo:
Executando o programa acima, os resultados de saída são os seguintes:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbinEu sou a variável Perl /usr/local/bin:/bin:/usr/bin:/ usr /local/sbin:/usr/sbin:/sbin
A função Perl fork() é usada para criar um novo processo.
Retorna o PID do processo filho no processo pai e 0 no processo filho. Se ocorrer um erro (por exemplo, memória insuficiente), undef será retornado e $!
fork pode ser usado em conjunto com exec. O processo termina depois que a função exec executa o comando entre aspas.
Executando o programa acima, os resultados de saída são os seguintes:
Saída via processo pai Saída via processo filho ID do processo concluído no domingo, 19 de junho de 2016 22:21:14 CST ID do processo: 47117
Se o processo sair, ele enviará um sinal CHLD para o processo pai e se tornará um processo zumbi. O processo pai precisa usar wait e waitpid para encerrá-lo. Claro, você também pode definir $SIG{CHLD} como IGNORG:
Executando o programa acima, os resultados de saída são os seguintes:
Saída via processo pai Saída via processo filho ID do processo concluído em domingo, 19 de junho de 2016 22:30:56 CST ID do processo: -1
Perl kill('signal', (Process List)) envia um sinal para um grupo de processos. sinal é o sinal digital enviado, 9 é para encerrar o processo.
Primeiro, vamos dar uma olhada nos sinais comumente usados no Linux, veja a lista a seguir:
Explicação do nome do sinal e anotação de valor——————————————— ———HUP 1 A Travamento detectado INT 2 A Interrupção do teclado QUIT 3 A Parada do teclado ILL 4 A Instrução ilegal ABRT 6 C Falha FPE 8 C Ponto flutuante Anormal KILL 9 Sinal do terminal AF USR1 10 A Sinal definido pelo usuário 1SEGV 11 C Acesso ilegal à memória USR2 12 A Sinal definido pelo usuário 2PIPE 13 A Gravação no tubo ALRM sem leitor 14 A Sinal do temporizador TERM do despertador 15 A Sinal do terminal CHLD 17 B Finalização do processo filho CONT 18 E Continuar STOP se parado 19 DF Parar o processo TSTP 20 D Digite o comando de parada TTIN no tty 21 D Digite TTOU no tty do processo em segundo plano 22 D saída tty para processo em segundo plano
O exemplo a seguir envia sinais SIGINT para os processos 104 e 102: