Latest web development tutorials

la gestion des processus Perl

Perl vous pouvez dans différentes façons de créer un processus.

Ce tutoriel va discuter de la gestion de certains processus.

  • Vous pouvez utiliser la variable spéciale$$ ou PROCESS_ID $pour obtenir l'ID de processus.

  • % ENV hash détient le processus parent, qui est les variables d'environnement du shell en Perl peuvent modifier ces variables.

  • exit () est généralement utilisé pour quitter un processus enfant, le processus enfant quitte le processus principal quitte après tout.

  • Toutes les poignées sont ouvertes dup dans la fonction sous-programme () pour copier tout fermer toutes les poignées processus ne seront pas affecter d'autres processus.


opérateur backtick

Utilisation de l'opérateur backquote peut facilement exécuter des commandes Unix. Vous pouvez insérer des commandes simples dans les anti-citations. Exécution de la commande renverra les résultats:

#!/usr/bin/perl

@files = `ls -l`;

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

1;

Le programme ci-dessus, les résultats de sortie sont les suivantes:

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

fonction system ()

Vous pouvez également utiliser la fonctionsystem () exécute la commande Unix, la commande est exécutée directement sortie.Par défaut, le courant sera envoyé au point de STDOUT de Perl où, écran généralement. Vous pouvez également utiliser l'opérateur de redirection> sortie vers le fichier spécifié:

Le programme ci-dessus, les résultats de sortie sont les suivantes:

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

Notez que la commande que vous devez inclure des variables d'environnement telles que la production ou $ HOME $ PATH, comme suit:

#!/usr/bin/perl

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

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

1;

Le programme ci-dessus, les résultats de sortie sont les suivantes:

/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

fonction fork ()

fonction fork Perl () est utilisée pour créer un nouveau processus.

Renvoie l'enfant dans le PID du processus parent, dans le processus de l'enfant retourne 0. Si une erreur (par exemple, de mémoire) est produite retourne undef et $! Est réglé sur le message d'erreur correspondant.

Il peut être utilisé en conjonction avec la fourche et exec. exec processus d'exécution de la fonction qui est achevée après la fin de la commande entre guillemets.

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

Le programme ci-dessus, les résultats de sortie sont les suivantes:

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

Si le processus se termine, il envoie un signal au processus parent après CHLD, il deviendra un processus mort qui nécessite une attente de processus parent et waitpid terminé. Bien sûr, vous pouvez également définir $ SIG {CHLD} pour 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;

Le programme ci-dessus, les résultats de sortie sont les suivantes:

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

fonction Kill

Perl kill ( «signal», ( liste de processus)) envoie un signal à un groupe de processus.signal est un signal numérique envoyé 9 pour tuer le processus.

Premier coup d'oeil à linux couramment utilisé le signal, voir la liste ci-dessous:

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

L'exemple suivant traite 104 et 102 pour envoyer le signal SIGINT:

#!/usr/bin/perl

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