免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11777 | 回复: 6
打印 上一主题 下一主题

Perl的sleep函数问题请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-01 15:11 |只看该作者 |倒序浏览
在测试父进程向子进程发信号的时候,发现子进程的sleep函数的时间消逝不正确,干脆就是没什么用,但是父进程里面的sleep没有问题,请问是哪里出错了呢?代码如下:

#!/usr/bin/perl -w
# Test signals to child processes using kill.
use warnings;
use strict;
use POSIX qw(:signal_h :errno_h :sys_wait_h);

$SIG{ 'USR1' } = \&user1;

$| = 1;

sub user1
{
        $SIG{ 'USR1' } = \&user1;
        print("I've recvd SIGUSER1.\n");
}


if(my $pid = fork() ) {
        kill('USR1', $pid);
         print("I've just sent a signal.\n");
        sleep(3);
        print("Now, I'm going to send once more.\n");
        kill('USR1', $pid);
        print("Parent exit.\n");
}
elsif (defined($pid)) {
        print("My return pid is $pid, and my real pid is $$.\n");
        sleep(6);
        print("Kid exit.\n");
        exit();
}
else {
        print("Forking error...!\n");
}

wait();


运行结果是Kid很快就先打印退出,根本没有sleep.

论坛徽章:
0
2 [报告]
发表于 2007-02-01 15:20 |只看该作者
你让小孩睡觉,但是马上就杀了他……

论坛徽章:
0
3 [报告]
发表于 2007-02-01 15:24 |只看该作者
原帖由 dajun 于 2007-2-1 15:20 发表
你让小孩睡觉,但是马上就杀了他……

楼上的兄弟能否说明白一点呢?Kid收到USR1只是会打印下吧?

论坛徽章:
0
4 [报告]
发表于 2007-02-01 15:26 |只看该作者
还是说Kid收到USR1以后的系统调用不能返回?

论坛徽章:
0
5 [报告]
发表于 2007-02-01 15:30 |只看该作者

明白了

嗯,原来跟Linux C的IPC一样的道理。刚才受误导了,谢谢2楼兄弟。

论坛徽章:
0
6 [报告]
发表于 2007-02-01 16:08 |只看该作者
sorry,真是惭愧,我看的时候大意了,没看到你注册信号函数的那个地方,
现在我倒是糊涂了……

你的程序并不是每次运行都一样的结果的:

[root@rh39 mnt]# perl 1.pl

My return pid is 0, and my real pid is 11321.
I've just sent a signal.
I've recvd SIGUSER1.
Kid exit.

[root@rh39 mnt]# perl 1.pl

My return pid is 0, and my real pid is 11323.
I've just sent a signal.
I've recvd SIGUSER1.
Kid exit.

[root@rh39 mnt]# perl 1.pl
I've just sent a signal.

My return pid is 0, and my real pid is 11325.
I've recvd SIGUSER1.
Now, I'm going to send once more.
Parent exit.
I've recvd SIGUSER1.
Kid exit.

论坛徽章:
0
7 [报告]
发表于 2007-02-01 16:14 |只看该作者
原帖由 jacksting 于 2007-2-1 15:30 发表
嗯,原来跟Linux C的IPC一样的道理。刚才受误导了,谢谢2楼兄弟。

c下好像也不会被杀死的(如果反复注册信号函数的话)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP