【问题标题】:Perl: stop a command started using perl "system" in windowsPerl:停止在 Windows 中使用 perl“系统”启动的命令
【发布时间】:2015-01-20 18:50:59
【问题描述】:

在 Perl 中,我在两个不同的 windows 命令行 (Cmd) 中启动了两个命令,如下:

system("start $cmd1");
system("start $cmd2");

基本上,这两个命令都会继续运行,直到我使用“CTRL+C”停止它们。

我的问题是:

如何向每个 Cmd 行(或命令)发送“CTR+C”?

谢谢。

【问题讨论】:

    标签: windows perl command system


    【解决方案1】:

    我认为你可以使用

    my $pid = system(1, $cmd1);
    
    # One of the following:
    kill(INT  => $pid);  # Sends Ctrl-C
    kill(TERM => $pid);  # Sends Ctrl-Break
    kill(KILL => $pid);  # Calls TerminateProcess($handle, 9)
    
    waitpid($pid, 0);
    

    【讨论】:

    • system在什么情况下会返回进程ID?
    • 你也可以使用open() 来做类似的事情。如果你 open() 一个 exec 管道,它会返回一个 pid。
    • 正在终止进程“正确”且安全吗?还有其他安全的方法吗?
    【解决方案2】:

    我通过创建两个分离的进程解决了这个问题。请看下面的代码:`

    use Win32::Process;
    use Win32;
    
        sub ErrorReport{
            print Win32::FormatMessage( Win32::GetLastError() );
        }
    
        Win32::Process::Create($ProcessObj,
                                    "C:\\winnt\\system32\\notepad.exe",
                                    "notepad temp.txt",
                                    0,
                                    DETACHED_PROCESS,
                                    ".")|| die ErrorReport();
    
        $ProcessObj->Suspend();
        $ProcessObj->Resume();
        $ProcessObj->Wait(INFINITE);
    

    `

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 2019-12-04
      • 2014-07-02
      • 1970-01-01
      相关资源
      最近更新 更多