2014-11-22 84 views
2

在Perl用perl“系统”的命令开始,我开始在两个不同的窗口的命令行(CMD)的两个命令,如下:的Perl:停止在窗口

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

基本上,这两个命令继续运行,直到我用“CTRL + C”来阻止他们。

我的问题是:

如何 “CTR + C” 发送到每个队列的内容(或命令)?

谢谢。

回答

0

我解决它通过创建两个分离的过程。请参见下面的代码:`

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); 

`

0

我认为你可以使用

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); 
+0

在什么情况下会'system'返回一个进程ID? – DavidO 2014-11-22 21:08:29

+0

没关系,我在http://perldoc.perl.org/perlport.html#system – DavidO 2014-11-22 22:17:22

+1

找到了答案你也可以用'open()'来做类似的事情。如果你打开()一个exec管道,它将返回一个pid。 – Sobrique 2014-11-22 22:30:24