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