Perl提供了一个fork()函数,该函数对应于同名的Unix系统调用。在大多数类似Unix的平台上,fork()系统调用是可用的,Perl的fork()只是简单地调用它。在某些平台(如Windows)上,fork()系统调用不可用,可以构建Perl以在解释器级别模拟fork()。
fork()
函数用于克隆当前进程。此调用将在同一点创建一个运行相同程序的新进程。它将子pid返回到父进程,将0返回到子进程,或者在fork不成功时返回。
可以在进程内使用exec()函数启动请求的可执行文件,该文件将在单独的进程区域中执行,exec()将等待它完成,然后以与该进程相同的退出状态退出。
#!/usr/bin/perl if(!defined($pid = fork())) { #fork返回了undef,所以没有成功 die "Cannot fork a child: $!"; } elsif ($pid == 0) { print "Printed by child process\n"; exec("date") || die "can't exec date: $!"; } else { #fork返回0或undef #所以这个分支是父级的 print "Printed by parent process\n"; $ret = waitpid($pid, 0); print "Completed process id: $ret\n"; } 1;
输出结果
执行上述代码后,将产生以下结果-
Printed by parent process Printed by child process Tue Sep 17 15:41:08 CDT 2013 Completed process id: 17777
可以将wait()和waitpid()作为由返回的伪进程ID进行传递fork()
。这些调用将正确地等待伪进程的终止并返回其状态。如果您使用waitpid()函数在没有等待孩子的情况下进行分叉,则会堆积僵尸。在Unix系统上,可以通过将$SIG {CHLD}设置为“ IGNORE”来避免这种情况,如下所示:
#!/usr/bin/perl local $SIG{CHLD} = "IGNORE"; if(!defined($pid = fork())) { #fork返回了undef,所以没有成功 die "Cannot fork a child: $!"; } elsif ($pid == 0) { print "Printed by child process\n"; exec("date") || die "can't exec date: $!"; } else { #fork返回0或undef #所以这个分支是父级的 print "Printed by parent process\n"; $ret = waitpid($pid, 0); print "Completed process id: $ret\n"; } 1;
输出结果
执行上述代码后,将产生以下结果-
Printed by parent process Printed by child process Tue Sep 17 15:44:07 CDT 2013 Completed process id: -1
本文向大家介绍Perl中的system()函数,包括了Perl中的system()函数的使用技巧和注意事项,需要的朋友参考一下 您可以使用 system() Perl函数来执行任何Unix命令,该命令的输出将进入perl脚本的输出。默认情况下,它是屏幕,即STDOUT,但是您可以使用重定向操作符将其重定向到任何文件>- 当执行上述代码时,它列出了当前目录中所有可用的文件和目录- 当命令包含诸如$P
本文向大家介绍Perl中的kill()函数,包括了Perl中的kill()函数的使用技巧和注意事项,需要的朋友参考一下 Perl kill('KILL', (Process List))函数可用于通过将fork()返回的ID传递给伪进程来终止它。 注意,在伪进程上使用kill(' kill ',(进程列表))通常会导致内存泄漏,因为实现伪进程的线程没有机会清理其资源。 可以使用kill()函数向目
本文向大家介绍Perl中有用的DBI函数,包括了Perl中有用的DBI函数的使用技巧和注意事项,需要的朋友参考一下 检查available_drivers 通过@INC中的目录搜索DBD::*模块,返回所有可用驱动程序的列表。默认情况下,如果某些驱动程序被较早目录中的其他同名驱动程序隐藏,则会发出警告。为$quiet传递真实值将禁止该警告。 检查installed_drivers 返回所有已“安装
本文向大家介绍Linux中fork()函数实例分析,包括了Linux中fork()函数实例分析的使用技巧和注意事项,需要的朋友参考一下 一、fork 入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后
问题内容: 我有一些需要在Java中转置的Perl代码。在此代码中,我必须处理Perl的。Java中是否有等效功能?Perl代码如下所示: 问题答案: Perl的/ 函数是一种用途广泛的转换实用程序,具有其自己的格式语法(在此使用,它使输入任意长的十六进制字符串作为输入)在Java世界中没有直接等效的语法。但是,翻译… …对于Java,您可以例如使用: 有关更多信息,请阅读Javadocs中的类参
主要内容:实例,向子程序传递参数,实例,实例,向子程序传递哈希,实例,子程序返回值,实例,子程序的私有变量,实例,变量的临时赋值,实例,静态变量,实例,子程序调用上下文,实例Perl 子程序也就是用户定义的函数。 Perl 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。 Perl 子程序可以出现在程序的任何地方,语法格式如下: 调用子程序语法格式: 在 Perl 5.0 以下版本调用子程序方法如下: 在新版本上,虽然也支持该调用方法,但不推荐使用。 接下来我们来看一