Latest web development tutorials

Zarządzanie procesami Perl

Perl można na różne sposoby, aby stworzyć proces.

Ten poradnik omawia zarządzanie niektórych procesów.

  • Można użyć specjalnej zmiennej$ $$lubPROCESS_IDuzyskać identyfikator procesu.

  • % ENV hash trzyma procesu macierzystego, która jest zmienne środowiska powłoki w Perl może modyfikować te zmienne.

  • exit () jest zwykle używany, aby zamknąć proces potomny, proces dziecko wychodzi główny proces kończy działanie po wszystkim.

  • Wszystkie otwarte uchwyty są dup w funkcji podprogram (), aby skopiować wszystko Zamknij wszystko obsługuje procesy nie wpłynie na inne procesy.


operator grawis

Korzystanie z operatorem backquote może z łatwością wykonywać polecenia Unix. Można wstawić kilka prostych poleceń w kierunku przeciwnym do cytatów. wykonanie polecenia zwróci wyniki:

#!/usr/bin/perl

@files = `ls -l`;

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

1;

Powyższy program, wyniki wyjściowe są następujące:

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 ()

Można również użyć funkcjisystemu () wykonuje polecenie systemu Unix, komenda jest wykonywana bezpośrednio wyjście.Domyślnie, prąd zostanie wysłany do Perl punktu STDOUT gdzie zwykle ekran. Można również użyć operatora przekierowania> wyjście do podanego pliku:

Powyższy program, wyniki wyjściowe są następujące:

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

Zauważ, że polecenie trzeba zawierać zmienne środowiskowe, takie jak wyjście lub $ HOME $ PATH, co następuje:

#!/usr/bin/perl

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

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

1;

Powyższy program, wyniki wyjściowe są następujące:

/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

Widelec function ()

Funkcja Perl widelec () jest wykorzystywane do tworzenia nowego procesu.

Zwraca dziecko w PID procesu nadrzędnego w procesie dziecko zwraca 0. W przypadku wystąpienia błędu (na przykład, pamięci) wystąpiły zyski undef, a $! Jest ustawiona na odpowiednim komunikatem o błędzie.

Można go stosować w połączeniu z widełek i Exec. Exec Proces wykonywania funkcji, która została zakończona po zakończeniu polecenia wewnątrz cudzysłowów.

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

Powyższy program, wyniki wyjściowe są następujące:

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

Jeśli proces zakończy, wysyła sygnał do procesu macierzystego po CHLD, stanie się martwy proces, który wymaga czekać proces macierzysty i waitpid zakończone. Oczywiście, można również ustawić $ SIG {CHLD}, aby 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;

Powyższy program, wyniki wyjściowe są następujące:

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

funkcja Zabij

zabitych Perl ( "Sygnał" ( Lista Proces)) wysyła sygnał do grupy procesów.Sygnał jest wysyłany sygnał cyfrowy 9 zabić proces.

Pierwsze spojrzenie na linux powszechnie stosowane sygnału, patrz lista poniżej:

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

Poniższy przykład przetwarza 104 i 102, aby wysłać sygnał SIGINT:

#!/usr/bin/perl

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