Perl process management
You can create processes in different ways in Perl.
This tutorial will discuss the management of some processes.
You can use special variables.
$$
or$PROCESS_ID
to get the process ID.The
%ENV
hash stores the parent process, that is,shell
environmentvariables, which can be modified in Perl.exit()
is usually used to exit a child process, and the main process exits after all the child processes exit.All open handles will be used in the subroutine
dup()
function copy, all closed processes all handles will not affect other processes.
Backquote operator
It can be easily executed using the backquote operator Unix
orders. Youcan insert some simple commands in backquotes. The result is returned afterthe command is executed:
#!/usr/bin/perl
@files = `ls -l`;
foreach $file (@files){
print $file;
}
1;
Execute the above procedure, and the output is as follows:
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 () function
You can also use it. system()
function executes the Unix command, whichoutputs the result directly. By default, it will be sent to the current Perl STDOUT
. The place you point to is usually the screen. You can also use the redirect operator >
export to the specified file:
Execute the above procedure, and the output is as follows:
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
……
You need to note that the command contains environment variables such as $PATH
or $HOME
, as shown below
Example
#/ Usr/bin/perl $PATH="I am a variable of Perl"; System ('echo $PATH '); #$ PATH
As a shell environment variable system ("echo $PATH"); #$ PATH as Perl
The variable system ("echo $PATH") of# Escape $1;
Execute the above procedure, and the output is as follows:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
I am a variable of Perl
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
Fork () function
Perl fork()
function is used to create a new process.
Returns the PID of the child process in the parent process and 0 in the child process. Return if an error occurs (for example, out of memory) undef
and set the $!
set to the corresponding error message.
fork
can and exec
use it together. The process ends afterthe exec
function executes the command in quotation marks.
Example
#/ Usr/bin/perlif (! Defined ($pid=fork())) {# fork error returned
Undefie "Unable to create child process: $!";} Elsif ($pid==0) {print "Output through
child processes n"; exec ("date") | | die "Unable to output date: $!";}else{#
Print 'output through parent process' in the parent process$
Ret=waitpid ($pid, 0); Print "Completed process ID: $ret n";} 1;
Execute the above procedure, and the output is as follows:
Output through parent process
Output through child processes
Sunday, June 19, 2016 22:21:14 CST
Completed Process ID: 47117
If the process exits, a CHLD
after the signal, it becomes a dead process and needs to be used by the parent process wait
and waitpid
to stop. Of course, you can also set the $SIG{CHLD} is IGNORG
:
Example
#/ Usr/bin/perlocal $SIG {CHLD}="IGNORE"; If (! Defined ($pid=fork()) {# fork
Error returned
Undefie "Unable to create child process: $!";} Elsif ($pid==0)
{print "Output through child processes n"; exec ("date") || die
"Unable to output date: $!";}else{#
Print 'output through parent process' in the parent process$
Ret=waitpid ($pid, 0); Print "Completed process ID: $ret n";} 1;
Execute the above procedure, and the output is as follows:
Output through parent process
Output through child processes
Sunday, June 19, 2016 22:30:56 CST
Completed process ID: -1
Kill function
Perl kill('signal', (Process List))
send a signal to a group of processes. signal
is the digital signal sent, 9 to kill the process.
First, take a look at the common signals in linux, as shown in the following list:
Signal name Value Mark Explain
————————————————————————————————————————————————————————————
HUP 1 A Pending detected
INT 2 A Interrupt from keyboard
QUIT 3 A Stop from keyboard
ILL 4 A Illegal instructions
ABRT 6 C fail
FPE 8 C Floating-point exception
KILL 9 AF Terminal signal
USR1 10 A User defined signal 1
SEGV 11 C Illegal memory access
USR2 12 A User Defined Signal 2
PIPE 13 A Write to a pipeline without readers
ALRM 14 A Timer signal from alarm clock
TERM 15 A Terminal signal
CHLD 17 B Child process termination
CONT 18 E If stopped, continue
STOP 19 DF Stop process
TSTP 20 D Tty typed stop command
TTIN 21 D Tty input to backend processes
TTOU 22 D Tty output to backend processes
The following example is sent to processes 104 and 102 SIGINT
signal:
Example
#!/usr/bin/perlkill('INT',104,102);1;