나는 이런 식으로 뭔가 실행하면 나는 윈도우 7IPC :: Open3이 요청한 프로그램 대신 cmd.exe를 호출하는 이유는 무엇입니까?
에 펄에 (VC10로 컴파일) 5.16.3 64 이것을 실행 해요 :
use strict;
use warnings;
use IPC::Open3;
use Symbol 'gensym';
my $command = q[perl -e "$| = 1; for (1..60) { print '.'; sleep 1 }"];
my ($in, $out, $err);
$out = gensym;
$err = gensym;
my $pid = open3($in, $out, $err, $command);
내가 프로세스 목록에서 볼 수 있습니다 그 실제를 IPC::Open3
에 의해 호출 명령은 다음과 같습니다
cmd.exe /x/d/c perl -e "$| = 1; for (1..60) { print '.'; sleep 1 }"
어느은 물론, 실제 호출 하위 프로세스를 생성
:
perl -e "$| = 1; for (1..60) { print '.'; sleep 1 }"
이 때문에 나는 pid
을 cmd.exe에 대응시키고 perl.exe에 대응하는 것은 아닙니다.
설명서에는이 호출 순서 또는 Windows에서의 다른 동작과 관련된 것에 대해서는 언급되어 있지 않습니다. 나는 그것을 테스트 할 리눅스/유닉스 박스를 가지고 있지 않지만, 거기에 그런 것을하지 않을 것이라고 확신한다. (만약 누군가가 테스트 할 수 있다면 틀렸다면 알려줘).
어쨌든, 나는 왜 이것을하고 있는지 궁금합니다. IPC::Open3
? 그 명령에서 펄을 직접 호출하지 않는 이유는 무엇입니까?
미리 의견을 보내 주셔서 감사합니다.
대 답 :
다음은 쉘을 호출하지 않아야 다음과 같습니다. 나는이 두 관습 사이에 실제적인 차이가 있다고 생각한 적이 없었다. 감사! :-) –
@Francisco Zarabozo comment, 훌륭한 대답에 동의합니다! – arkhamvm