Sie können in Perl Prozesse auf unterschiedliche Weise erstellen.
In diesem Tutorial werden einige Methoden zur Verwaltung von Prozessen erläutert.
Sie können die Prozess-ID mithilfe der speziellen Variablen $$ oder $PROCESS_ID abrufen.
Der %ENV-Hash speichert die Umgebungsvariablen im übergeordneten Prozess, der die Shell darstellt. Diese Variablen können in Perl geändert werden.
exit() wird normalerweise verwendet, um einen untergeordneten Prozess zu beenden. Der Hauptprozess wird beendet, nachdem alle untergeordneten Prozesse beendet wurden.
Alle offenen Handles werden von der Funktion dup() in die Unterroutine kopiert, und alle vom Prozess geschlossenen Handles haben keine Auswirkungen auf andere Prozesse.
Unix-Befehle können einfach mit dem Backtick-Operator ausgeführt werden. Sie können einige einfache Befehle in Backticks einfügen. Nachdem der Befehl ausgeführt wurde, werden die Ergebnisse zurückgegeben:
#!/usr/bin/perl@files = `ls -l`;foreach $file (@files){ print $file;}1;
Beim Ausführen des obigen Programms lauten die Ausgabeergebnisse wie folgt:
drwxr-xr-x 3 root root 4096 14. September 06:46 9-14drwxr-xr-x 4 root root 4096 13. September 07:54 android-rw-r--r-- 1 root root 574 17. September 15:16 Index .htmdrwxr-xr-x 3 544 401 4096 6. Juli 16:49 MIME-Lite-3.01-rw-r--r-- 1 root root 71 17. September 15:16 test.pl……
Sie können auch die Funktion system() verwenden, um Unix-Befehle auszuführen. Durch die Ausführung dieses Befehls werden die Ergebnisse direkt ausgegeben. Standardmäßig wird es an die Stelle gesendet, auf die Perls STDOUT derzeit zeigt, was normalerweise der Bildschirm ist. Sie können auch den Umleitungsoperator > verwenden, um in eine bestimmte Datei auszugeben:
Beim Ausführen des obigen Programms lauten die Ausgabeergebnisse wie folgt:
drwxr-xr-x 3 root root 4096 14. September 06:46 9-14drwxr-xr-x 4 root root 4096 13. September 07:54 android-rw-r--r-- 1 root root 574 17. September 15:16 Index .htmdrwxr-xr-x 3 544 401 4096 6. Juli 16:49 MIME-Lite-3.01-rw-r--r-- 1 root root 71 17. September 15:16 test.pl……
Sie müssen auf die Ausgabe des Befehls achten, einschließlich Umgebungsvariablen wie $PATH oder $HOME, wie unten gezeigt:
Beim Ausführen des obigen Programms lauten die Ausgabeergebnisse wie folgt:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbinIch bin die Perl-Variable /usr/local/bin:/bin:/usr/bin:/usr /local/sbin:/usr/sbin:/sbin
Die Perl-Funktion fork() wird verwendet, um einen neuen Prozess zu erstellen.
Gibt die PID des untergeordneten Prozesses im übergeordneten Prozess und 0 im untergeordneten Prozess zurück. Wenn ein Fehler auftritt (z. B. nicht genügend Speicher), wird undef zurückgegeben und $! auf die entsprechende Fehlermeldung gesetzt.
fork kann in Verbindung mit exec verwendet werden. Der Prozess endet, nachdem die Exec-Funktion den Befehl in Anführungszeichen ausgeführt hat.
Beim Ausführen des obigen Programms lauten die Ausgabeergebnisse wie folgt:
Ausgabe über übergeordneten Prozess Ausgabe über untergeordneten Prozess Prozess-ID abgeschlossen am Sonntag, 19. Juni 2016 22:21:14 CST Prozess-ID: 47117
Wenn der Prozess beendet wird, sendet er ein CHLD-Signal an den übergeordneten Prozess und wird zu einem Zombie-Prozess. Der übergeordnete Prozess muss wait und waitpid verwenden, um ihn zu beenden. Natürlich können Sie $SIG{CHLD} auch auf IGNORG setzen:
Beim Ausführen des obigen Programms lauten die Ausgabeergebnisse wie folgt:
Ausgabe über übergeordneten Prozess Ausgabe über untergeordneten Prozess Prozess-ID abgeschlossen am Sonntag, 19. Juni 2016 22:30:56 CST Prozess-ID: -1
Perl kill('signal', (Process List)) sendet ein Signal an eine Gruppe von Prozessen. Signal ist das gesendete digitale Signal, 9 soll den Prozess abbrechen.
Werfen wir zunächst einen Blick auf die unter Linux häufig verwendeten Signale, siehe folgende Liste:
Erläuterung des Signalnamens und der Wertanmerkung——————————————————————————————— ——————————— ———HUP 1 A Hang erkannt INT 2 A Interrupt von der Tastatur QUIT 3 A Stopp von der Tastatur ILL 4 A Ungültige Anweisung ABRT 6 C Fehler FPE 8 C Gleitkomma Abnormal KILL 9 AF-Terminalsignal USR1 10 A Benutzerdefiniertes Signal 1SEGV 11 C Unzulässiger Speicherzugriff USR2 12 A Benutzerdefiniertes Signal 2PIPE 13 A Schreiben in Pipe ALRM ohne Lesegerät 14 A Timersignal TERM vom Wecker 15 A Terminalsignal CHLD 17 B Beendigung des untergeordneten Prozesses CONT 18 E Weiter STOP, wenn gestoppt 19 DF Stoppen Sie den Prozess TSTP 20 D Geben Sie den Stoppbefehl TTIN auf dem TTY ein. 21 D Geben Sie TTOU auf dem TTY des Hintergrundprozesses ein. 22 D TTY-Ausgabe an den Hintergrundprozess
Das folgende Beispiel sendet SIGINT-Signale an die Prozesse 104 und 102: