Perl函數中Perl進程控制函數用法解析
本文和大家重點討論一下Perl進程處理函數的用法,主要包括進程啟動函數,進程終止函數和進程控制函數等內容,相信通過本文的學習你對Perl進程處理函數的用法一定會有深刻的認識。
Perl進程處理函數
1、進程啟動函數
Perl函數名 eval
調用語法eval(string)
解說將string看作Perl函數名語句執行。
正確執行后,系統變量$@為空串,如果有錯誤,$@中為錯誤信息。
例子$print="print(\"hello,world\\n\");";
eval($print);
結果輸出hello,world
Perl函數名 system
調用語法system(list)
解說list中第一個元素為程序名,其余為參數。
system啟動一個進程運行程序并等待其結束,程序結束后錯誤代碼左移八位成為返回值。
例子@proglist=("echo","hello,world!");
system(@proglist);
結果輸出hello,world!
Perl函數名 fork
調用語法procid=fork();
解說創建程序的兩個拷貝--父進程和子進程--同時運行。子進程返回零,父進程返回非零
值,此值為子程序的進程ID號。
例子
- $retval=fork();
- if($retval==0){
- #thisisthechildprocess
- exit;#thisterminatesthechildprocess
- }else{
- #thisistheparentprocess
- }
結果輸出無
Perl函數名 pipe
調用語法pipe(infile,outfile);
解說與fork合用,給父進程和子進程提供通信的方式。送到outfile文件變量的信息可以
通過infile文件變量讀取。步驟:
1、調用pipe
2、用fork將程序分成父進程和子進程
3、一個進程關掉infile,另一個關掉outfile
例子
- pipe(INPUT,OUTPUT);
- $retval=fork();
- if($retval!=0){
- #thisistheparentprocess
- close(INPUT);
- print("Enteralineofinput:\n");
- $line=<STDIN>;
- printOUTPUT($line);
- }else{
- #thisisthechildprocess
- close(OUTPUT);
- $line=<INPUT>;
- print($line);
- exit(0);
- }
結果輸出$
program
Enteralineofinput:
Hereisatestline
Hereisatestline
$
Perl函數名 exec
調用語法exec(list);
解說與system類似,區別是啟動新進程前結束當前程序。常與fork合用,當fork分成兩個
進程后,子進程用exec啟動另一個程序。
例子
結果輸出
Perl函數名 syscall
調用語法syscall(list);
解說調用系統Perl函數名,list第一個元素是系統調用名,其余為參數。
如果參數是數字,就轉化成C的整型數(typeint)。否則傳遞字符串的指針。詳見UNIX的幫助Perl函數名文檔。
使用syscall必須包含文件syscall.pl,即:
require("syscall.ph");
例子
結果輸出
2、進程終止函數
Perl函數名 die
調用語法die(message);
解說終止程序并向STDERR輸出錯誤信息。message可以為字符串或列表。如果最后一個參
數不包含換行符,則程序文件名和行號也被輸出。
例子die("Cannotopeninputfile");
結果輸出Cannotopeninputfileatmyprogline6.
Perl函數名 warn
調用語法warn(message);
解說與die類似,區別是不終止程序。
例子warn("Danger!Danger!\n");
結果輸出Danger!Danger!
Perl函數名 exit
調用語法exit(retcode);
解說終止程序并指定返回值。
例子exit(2);
結果輸出無
Perl函數名 kill
調用語法kill(signal,proclist);
解說給一組進程發送信號。
signal是發送的數字信號,9為殺掉進程。
proclist是進程ID列表。詳見kill的UNIX幫助。
例子
結果輸出 #p#
3、進程控制函數
Perl函數名 sleep
調用語法sleep(time);
解說將程序暫停一段時間。time是停止的秒數。返回值為實際停止的秒數。
例子sleep(5);
結果輸出無
Perl函數名 wait
調用語法procid=wait();
解說暫停程序執行,等待子進程終止。
不需要參數,返回值為子進程ID,如果沒有子進程,返回-1。
例子
結果輸出
Perl函數名 waitpid
調用語法waitpid(procid,waitflag);
解說暫停程序執行,等待特定的子進程終止。procid為等待的進程ID
例子
- $procid=fork();
- if($procid==0){
- #thisisthechildprocess
- print("thislineisprintedfirst\n");
- exit(0);
- }else{
- #thisistheparentprocess
- waitpid($procid,0);
- print("thislineisprintedlast\n");
- }
結果輸出$program
thislineisprintedfirst
thislineisprintedlast
$ #p#
4、其它控制函數
Perl函數名 caller
調用語法subinfo=caller();
解說返回調用者的程序名和行號,用于Perl函數名Debugger。
返回值為三元素的列表:
1、調用處的包名
2、調用者文件名
3、調用處的行號
例子
結果輸出
Perl函數名 chroot
調用語法chroot(dir);
解說改變程序的根目錄,詳見chroot幫助。
例子
結果輸出
Perl函數名 local
調用語法local($variable);
解說在語句塊(由大括號包圍的語句集合)中定義局域變量,僅在此語句塊中起作用,對其
的改變不對塊外同名變量造成影響。
千萬不要在循環中使用,否則每次循環都定義一個新的局域變量!
例子
結果輸出
Perl函數名 times
調用語法timelist=times
解說返回該程序及所有子進程消耗的工作時間。
返回值為四個浮點數的列表:
1、程序耗用的用戶時間
2、程序耗用的系統時間
3、子進程耗用的用戶時間
4、子進程耗用的系統時間
例子
結果輸出
【編輯推薦】