#!/usr/bin/perl -w
chdir ‘/home/zhangjingjing’ or die “can’t chdir to /home/zhangjingjing directory:!";exec′ls′,′−l′ordie"can′texecls:!”;
#第一行的程序代码会将当前工作目录切换到根目录,它的名称总是固定的
#第二行使用了多参数的exec函数来将结果传递到标准输出
#exec函数导致perl进程自己去执行任务,
例如:要运行/tmp目录下的bedrock命令并带上-o args以及程序本身所调用的参数:
chdir ‘/tmp’ or die “Cannot chdir /tmp:$!”;
exec ‘bedrock’, ‘-o’, ‘args1’, @ARGV;
#!/usr/bin/perl -w
open STDOUT,’>’,‘ls.out’ or die “can’t write to ls.outL!";openSTDERR,′>′,′ls.err′ordie"can′twritetols.err:!”;
chdir ‘/home/zhangjingjing’ or die “can’t chdir to /home/zhangjingjing directory:!";exec′ls′,′−l′ordie"can′texecls:!”;
#程序的前两行会重新打开STDOUT和STDERR并将它们重定向到当前工作目录下的两个文件里(在切换工作目录之前)
#在工作目录切换之后,将会执行显示目录清单里的命令,并把数据传送到之前打开的两个文件里
#!/usr/bin/perl -w
print date ;
if (date =~/\AS/){
print “go play!\n”;
}else{
print “get to work!\n”;
}
#因为Saturday周六和Sunday周日都是以S开头,而且date命令的输出结果又是以“今天是星期几”作为开始
#所以只要检查date命令的输出,看看它是否以S开头就可以了
#可以将模式换成/\A(Sat|Sun)/
\A: 匹配字符串的绝对开头
#!/usr/bin/perl -w
use 5.010;
sub my_hup_handler {state n;say′caughtHUP:′,++n}
sub my_usr1_handler {state n;say′caughtUSR1:′,++n}
sub my_usr2_handler {state n;say′caughtUSR2:′,++n}
sub my_usr2_handler {say ‘caught INT.Exiting.’;exit}
say " I am $$";
foreach my $signal (qw(int hup usr1 usr2)){
$SIG{uc KaTeX parse error: Expected 'EOF', got '}' at position 7: signal}̲="my_{signal}_handler";
}
while(1){sleep 1};
#我们需要另外打开一个终端会话来运行程序以发送信号
$ kill -HUP 61203
$perl -e ‘kill HUP => 61203’
$perl -e ‘kill USR2 => 61203’
#该程序的输出显示每次信号来到时我们已经见过的次数: KaTeX parse error: Expected 'EOF', got '#' at position 144: …t INT.Exiting.
#̲让它能捕获信号并报告之前收到该…kill -USR1 12345
#要捕获某些信号,就要设置信号处理句柄,做一些重复性的工作,对每个信号处理句柄子程序,都设置一个state变量
#这样每次调用子程序时都可以访问之前累计的数字
#用foreach循环一次将正确的子程序名称赋值给%SIG中的适当值
#最后创建一个无限循环,让程序一直运行着,准备接收信号
|
请发表评论