【发布时间】:2015-01-20 18:50:59
【问题描述】:
在 Perl 中,我在两个不同的 windows 命令行 (Cmd) 中启动了两个命令,如下:
system("start $cmd1");
system("start $cmd2");
基本上,这两个命令都会继续运行,直到我使用“CTRL+C”停止它们。
我的问题是:
如何向每个 Cmd 行(或命令)发送“CTR+C”?
谢谢。
【问题讨论】:
标签: windows perl command system
在 Perl 中,我在两个不同的 windows 命令行 (Cmd) 中启动了两个命令,如下:
system("start $cmd1");
system("start $cmd2");
基本上,这两个命令都会继续运行,直到我使用“CTRL+C”停止它们。
我的问题是:
如何向每个 Cmd 行(或命令)发送“CTR+C”?
谢谢。
【问题讨论】:
标签: windows perl command system
我认为你可以使用
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。
我通过创建两个分离的进程解决了这个问题。请看下面的代码:`
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);
`
【讨论】: