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_IDto get the process ID.The
%ENVhash stores the parent process, that is,shellenvironmentvariables, 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.
5.46.1. 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
……
5.46.2. 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 Execute the above procedure, and the output is as follows: $PATH or $HOME , as shown belowExample #
#/ 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;
/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
5.46.3. 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.
Execute the above procedure, and the output is as follows: If the process exits, a Execute the above procedure, and the output is as follows: 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;
Output through parent process
Output through child processes
Sunday, June 19, 2016 22:21:14 CST
Completed Process ID: 47117
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;
Output through parent process
Output through child processes
Sunday, June 19, 2016 22:30:56 CST
Completed process ID: -1
5.46.4. 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;