Latest web development tutorials

Perl Prozessmanagement

Perl Sie auf unterschiedliche Weise einen Prozess zu erstellen.

Dieses Tutorial wird die Verwaltung von einigen Prozessen diskutieren.

  • Sie können die spezielle Variable$$ oder PROCESS_ID $die Prozess - ID zu bekommen.

  • % ENV Hash hält den übergeordneten Prozess, der die Shell-Umgebungsvariablen in Perl ist können diese Variablen ändern.

  • exit () wird in der Regel verwendet , um ein Kind - Prozess zu beenden, verlässt das Kind Prozess der Hauptprozess , nachdem alle austritt.

  • Alle offenen Griffe sind dup in der Unterroutine () Funktion alle zu kopieren schließen alle Griffe Prozesse werden nicht andere Prozesse beeinflussen.


Graviszeichen Betreiber

die Backquote-Operator kann leicht Unix-Befehle ausführen. Sie können einige einfache Befehle in der Anti-Zitate einfügen. Die Befehlsausführung Ergebnisse angezeigt werden:

#!/usr/bin/perl

@files = `ls -l`;

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

1;

Das obige Programm sind die Ausgabeergebnisse wie folgt:

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

System () -Funktion

Sie können auch dasSystem () Funktion führt den Befehl aus Unix verwenden, wird der Befehl direkt ausgegeben ausgeführt.Standardmäßig wird der Strom auf Perl STDOUT Punkt gebracht, wo, in der Regel Bildschirm. Sie können auch die Umleitungsoperator> Ausgabe in die angegebene Datei:

Das obige Programm sind die Ausgabeergebnisse wie folgt:

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

Beachten Sie, dass der Befehl, den Sie brauchen, um Umgebungsvariablen wie Ausgang oder $ HOME $ PATH enthalten, wie folgt:

#!/usr/bin/perl

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

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

1;

Das obige Programm sind die Ausgabeergebnisse wie folgt:

/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

fork () Funktion

Perl fork () Funktion wird verwendet, um einen neuen Prozess zu erstellen.

Gibt das Kind in dem übergeordneten Prozess PID, in der Kind-Prozess 0 zurückgibt. Wenn ein Fehler aufgetreten ist (zum Beispiel aus dem Speicher) gibt undef und $! Ist auf die entsprechende Fehlermeldung gesetzt.

Es kann in Verbindung mit fork und exec verwendet werden. exec-Funktion Ausführung Prozess, der nach dem Ende des Befehls in Anführungszeichen abgeschlossen ist.

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

Das obige Programm sind die Ausgabeergebnisse wie folgt:

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

Wenn der Prozess beendet, es ein Signal an die übergeordnete Prozess nach CHLD sendet, wird es ein toter Prozess geworden, der einen übergeordneten Prozess warten erfordert und waitpid beendet. Natürlich können Sie auch $ SIG {CHLD} auf IGNORG gesetzt:

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

Das obige Programm sind die Ausgabeergebnisse wie folgt:

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

Kill-Funktion

Perl kill ( "Signal", ( Prozessliste)) sendet ein Signal an eine Gruppe von Prozessen.Signal ist ein digitales Signal 9 gesendet, um den Prozess zu beenden.

Erster Blick auf Linux häufig verwendete Signal, finden Sie in der folgenden Liste:

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

Das folgende Beispiel verarbeitet 104 und 102 SIGINT-Signal zu senden:

#!/usr/bin/perl

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