【问题标题】:fork implementation in perlperl中的fork实现
【发布时间】:2012-12-21 03:10:13
【问题描述】:

我想在 perl 中执行一个子进程。我还希望我的代码独立于平台(Windows 和 unix 都一样,除了文件路径等一些小故障)。

问题是windows中fork的perl实现,是一个伪进程,实际上是一个线程。请参考windows的perl fork仿真here

它还提到了在伪进程上执行killexec 命令时遇到的问题。为不同平台使用两个不同版本的 fork 是否安全,或者我应该使用特定于操作系统的 API?

【问题讨论】:

    标签: windows perl unix process


    【解决方案1】:

    Forks::Super 已经担心并解决了很多这样的可移植性问题,让您可以像这样可移植地运行代码

    use Forks::Super;
    
    $pid = fork();
    if ($pid != 0) {
       ...
       if (kill 'ZERO',$pid) { print "Job is running.\n"; }
       kill 'STOP', $pid; # or $pid->suspend
       kill 'CONT', $pid; # or $pid->resume
       kill 'TERM', $pid; # or $pid->terminate
       waitpid $pid, 0;   # or $pid->wait or $pid->waitpid(0)
    }
    

    【讨论】:

      【解决方案2】:

      假设您需要异步进程,请使用平台特定的 API(如果您可以等待子进程,则可以使用 systemqx)。

      在 UNIX 上是 fork/exec,在 Windows 上是 Win32::Process::Create。 Windows 上的 fork 仿真是一次勇敢的尝试,但在这方面的平台是如此不同,我认为你在尝试产生一个可以满足所有条件的便携式解决方案时比较松散。

      示例:python 尝试将接口与其subprocess 模块统一。它适用于简单的东西,但有 4 个 UNIX 特定参数和 2 个 Windows 特定参数(用于 Popen)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-19
        • 2020-04-30
        • 1970-01-01
        • 2016-01-04
        • 2013-03-06
        • 1970-01-01
        相关资源
        最近更新 更多