perl多任务问题
我已经完成了我之前使用perl线程的多线程程序,它可以在我的系统上运行.问题是,在某些需要运行的系统上,线程支持不会编译到perl中,我无法安装其他软件包.因此,我需要使用除线程之外的其他东西,我正在将代码移动到使用fork().这可以在我的
Windows系统上启动子任务.
一些问题: >如何确定子进程何时退出?我在线程数低于某个值时创建了新线程,我需要跟踪正在运行的线程数.对于进程,如何知道何时退出,以便我可以跟踪当时有多少存在,在创建一个计数器时递增计数器,在一个计数器退出时递减计数器? 解决方法
典型用法:
use POSIX ':sys_wait_h'; # for &WNOHANG # how to create a new background process $pid = fork(); if (!defined $pid) { die "fork() failed!" } if ($pid == 0) { # child # ... do stuff in background ... exit 0; # don't forget to exit or die from the child process } # else this is the parent,$pid contains process id of child process # ... do stuff in foreground ... # how to tell if a process is finished # also see perldoc perlipc $pid = waitpid -1,0; # blocking wait for any process $pid = wait; # blocking wait for any process $pid = waitpid $mypid,0; # blocking wait for process $mypid # after blocking wait/waitpid if ($pid == -1) { print "All child processes are finished.n"; } else { print "Process $pid is finished.n"; print "The exit status of process $pid was $?n"; } $pid = waitpid -1,&WNOHANG; # non-blocking wait for any process $pid = waitpid $mypid,0; # blocking wait for process $mypid if ($pid == -1) { print "No child processes have finished since last wait/waitpid call.n"; } else { print "Process $pid is finished.n"; print "The exit status of process $pid was $?n"; } # terminating a process - see perldoc -f kill or perldoc perlipc # this can be flaky on Windows kill 'INT',$pid; # send SIGINT to process $pid 在 分叉进程的I / O在Unix和Windows上通常是安全的.文件描述符是共享的,所以对于这样的事情 open X,">",$file; if (fork() == 0) { # in child print X "Childn"; close X; exit 0; } # in parent sleep 1; print X "Parentn"; close X; 子进程和父进程都会成功写入同一个文件(但要注意输出缓冲). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |